코딩테스트/백준

[Java] 백준 - 6588번 : 골드바흐의 추측 (Silver I)

배똥회장 2022. 8. 26. 13:54
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

6588번: 골드바흐의 추측

각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰

www.acmicpc.net

 

 

 

 

 

import java.io.*;
import java.util.*;
public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		//소수인지를 담을 해시맵
		HashMap<Integer, Boolean> decimal = new HashMap<>();
		
		int num = 0;
		while ((num = Integer.parseInt(br.readLine())) != 0) {
			//소수 조합이 여러 개일 경우 차이가 큰 것을 리턴하는 것이기 때문에 작은 숫자부터 시작
			for (int i = 2; i <= num; i++) {
				//만약 i가 해시맵에 없으면 소수인지 파악 후 넣기
				if (!decimal.containsKey(i)) decimal.put(i, check(i));
				//i가 소수가 아니면 넘어가기
				if (!decimal.get(i)) continue;
				//n은 숫자에서 i를 뺀 숫자
				int n = num - i;
				//n 역시 해시맵에 없으면 소수인지 파악 후 넣기
				if (!decimal.containsKey(n)) decimal.put(n, check(n));
				//만약 n도 소수라면 bw에 입력 후 for문 종료
				if (decimal.get(n)) {
					bw.write(num + " = " + i + " + " + n + "\n");
					break;
				}
			}
		}
		
		bw.flush();
		bw.close();
	}
	//소수 파악용 함수
	public static boolean check(int num) {
		for (int i = 2; i <= Math.sqrt(num); i++) {
			if (num % i == 0) return false;
		}
		
		return true;
	}
}

 

문제 결과 메모리 시간 코드 길이
6588 맞았습니다!! 50316 KB 628 ms 915 B

 

 

 

 

 

 

728x90