2024/11/13 4

[백준, 자바, 13909번] 창문 닫기

풀이해당 문제는 일반적인 방법으로 해결할 수 없다는 걸 알게 됨..이유는 배열을 N개 만큼 만들게 되면 메모리 초과가 발생함.그래서 다른 방법이 없을까 하나씩 찾아보니그냥 어떤 분기에서 변화가 있는지 Set에 넣어보면서 찾다보니계차수열 규칙을 발견// 1 -> 1// 2 -> 1 0// 3 -> 1 0 0// 4 -> 1 0 0 1// 5 -> 1 0 0 1 0// 6 -> 1 0 0 1 0 0// 7 -> 1 0 0 1 0 0 0// 8 -> 1 0 0 1 0 0 0 0// 9 -> 1 0 0 1 0 0 0 0 1// 10 -> 1 0 0 1 0 0 0 0 1 0// 11 -> 1 0 0 1 0 0 0 0 1 0 0// 12 -> 1 0 0 1..

알고리즘 2024.11.13

[백준, 자바, 17103번] 골드바흐 파티션

풀이해당 문제는 짝수의 입력값이 주어졌을 때,두 소수의 합이 입력값이 되는 경우를 카운팅 하는 문제로기존 소수를 구한 것처럼, 에라토스테네스의 체를 활용하여소수를 모두 배열에 넣은 다음2중 for문으로 찾으면서, 합이 큰 경우에 대한 조건 분기를 통해시간 효율을 줄이고자 했지만, 계속해서 시간 초과...그래서 어떤 힌트가 있을지 찾아보니,(인풋값 - 소수) 의 결과값이 소수인가(bool)?를 확인 이라는 문장을 보고허거덩하고 생각한 건, 찾은 소수를 Set에 넣고 좀 더 빠르게 확인하는 방법이 떠올라서아래와 같이 해결할 수 있었음.실패한 코드도 아래에 작성.  // 성공import java.io.*;import java.util.*;public class _17103 { public static v..

알고리즘 2024.11.13

[백준, 자바, 4948번] 베르트랑 공준

풀이해당 문제는 특정 정수보다 크면서 2배한 것 보다 작거나 같은모든 소수를 구하는 문제로서입력값은 0이 나올 때까지 받기에우선은 모든 입력 값을 배열에 담아두면서가장 큰 값을 찾고, 이후에 큰 값의 2배에 해당 하는 배열을 만들어서모든 소수를 에라토스테네스의 체를 활용하여 판별한 뒤이후 배열을 돌려가며 범위에 해당하는 소수를 카운팅하여 해결. import java.io.*;import java.util.*;public class _4948 { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); BufferedWriter bw = new BufferedW..

알고리즘 2024.11.13

[백준, 자바, 2581번] 소수

풀이이전 소수 찾기 문제를 통해 알게 된에라토스테네스의 체를 활용하여 해결우선 값이 더 큰  N을 기준으로 boolean 배열을 만들고2부터 배수가 되는 인덱스에 값을 true로 변경하고이후 범위를 M과 N 사이에 해당 하는 값을 조건에 따라처리하여 해결 import java.util.Scanner;public class _2581 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int N = sc.nextInt(); boolean[] li = new boolean[N+1]; li[1] = true; ..

알고리즘 2024.11.13