hahn

단계별로 풀어보기(기본 수학2 - 골드바흐의 추측) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(기본 수학2 - 골드바흐의 추측)

hahn 2021. 8. 24. 20:23
728x90
반응형

9020번: 골드바흐의 추측 (acmicpc.net)

 

9020번: 골드바흐의 추측

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아

www.acmicpc.net

처음에 문제 보고 한참을 고민했다.

 

왜 도저히 답이 안 나올까 하고 문제를 천천히 읽어봤는데

 

소수 2개로 숫자 하나를 표현하는거였다.

 

나는 3개 4개로 쪼개고 있으니 당연히 답이 안 나오지 ㅋㅋㅋㅋ

 

또 조건 중 두 소수의 차이가 가장 작아야 한다길래

 

음.. 그냥 반으로 쪼개고 안에서부터 해볼까? 했는데

 

바로 됐다 ㅋㅋㅋㅋㅋㅋㅋ

틀린 코드

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
        
        int testCaseCount,
            insertNumber;
        
        boolean check;
        
        testCaseCount = sc.nextInt();
        
        for(int i = 0; i < testCaseCount; i++){
            
            insertNumber = sc.nextInt();
            
            for(int j = insertNumber / 2; j > 0; j--){
                
                check = true;
                
                for(int k = 2; k < j; k++){
                    
                    if(j > 997) break;
                    
                    if(j % k == 0){
                        
                        check = false;
                        break;
                        
                    }
                    
                }
                
                if(check){
                    
                    for(int k = 2; k < (insertNumber - j); k++){
                        
                        if((insertNumber - j) % k == 0){
                            
                            check = false;
                            break;
                            
                        }
                        
                    }
                    
                }
                
                if(check) {
                	
                	if(j > insertNumber - j) {
                		System.out.print(insertNumber - j);
                		System.out.print(" ");
                		System.out.print(j);
                	}else {
                		System.out.print(j);
                		System.out.print(" ");
                		System.out.print(insertNumber - j);
                	}
                	break;
                	
                }
                
            }
            
        }
        
    }
    
}

음 사실 왜 틀렸었는지 기억이 나질 않는다.

 

아 그리고 열 받았던 거는 짝수만 해당였는데

 

계속 멍청하게 홀수 넣어두고 왜 소수랑 소수 아닌 게 나오지 했다.

 

문제 다시 읽고 오니 음 애초에 출력이 되면 안 된다는 걸 깨달았다.

 

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
        
        int testCaseCount,
            insertNumber;
        
        boolean check;
        
        testCaseCount = sc.nextInt();
        
        for(int i = 0; i < testCaseCount; i++){
            
            insertNumber = sc.nextInt();
            
            for(int j = (insertNumber / 2); j > 0; j--){
                
                check = true;
                
                for(int k = 2; k < j; k++){
                    
                    if(k > 997) break;
                    
                    if(j % k == 0){
                        
                        check = false;
                        break;
                        
                    }
                    
                }
                
                if(check){
                    
                    for(int k = 2; k < (insertNumber - j); k++){
                        
                        if((insertNumber - j) % k == 0){
                            
                            check = false;
                            break;
                            
                        }
                        
                    }
                    
                }
                
                if(check) {
                	
                	if(j > insertNumber - j) {
                		System.out.println(insertNumber - j + " " + j);
                	}else {
                		System.out.println(j + " " + (insertNumber - j));
                	}
                	break;
                	
                }
                
            }
            
        }
        
    }
    
}

이게 맞는 코드인데 중간에 엄청 많이 틀린 거는

 

뭘 잘못했을까 생각하다가 insertNumber / 2 하는 곳에 1 더 해줬던 게

 

잘못됐었을 거다.

 

암튼 발상 자체는 스무스했는데 문제 똑바로 안 읽고

 

너무 생각 없이 코드 짠 게 화근이다.

728x90
반응형