ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 소수 구하기(프로그래머스 lv1)
    알고리즘 2023. 1. 30. 14:48

    문제

    1. n개의 수를 입력하는 배열 입력
    2. 그 배열에서 임의의 3개의 수를 더한 값이 소수인 경우가 몇번인지를 구하시오.

    입력

    5
    1 2 7 6 4
    
    //결과
    4
    

    내가 해결한 방식

    1. 일단 임의의 세개의 수를 더하는 로직을 구현
    for(int i = 0; i < n; i++){
    	for(int j = i+1; j < n; j++){
    		for(int k = j+1; k < n; k++){
    			if(k != 0) {
            int tmp = nums[i] + nums[j] + nums[k];
    				if(validation(tmp)) cnt++;
    			}
    	}
    }
    

    배열 내 세번씩 더하는 경우의 수는 삼중포문으로 위와 같이 로직을 구현해야 한다. 그런데 만약 k라는 값이 0이라면 세개의 값을 더하는 것이 아닌 두개의 값만을 구하는 것이기 때문에 조건에 맞지 않는다. 그러므로 if(k≠0)일 경우에만 소수 값을 찾는다.

    validation 메소드로 소수를 검증했을 때 true를 반환한다면 소수인 경우이므로 cnt 변수를 증가시켜준다.

    1. 임의의 세개의 수가 소수인지 아닌지를 검증하는 메서드 생성
    public boolean validation(int num){
    	if(num == 1) return false;
    	if(num == 2) return true;
    	for(int i = 2; i < num; i++){
    		if(num % i == 0) return false;
    	}
    		return true;
    }	
    

    소수 값은 2부터 유효하므로 if(num == 1) return false로 구현했고, for문을 돌렸을 때 만약 num 값이 2라면 num % i 값이 0이 나오게 되므로 false가 나오게 되는데 2 값은 소수이므로 그래선 안된다. 이를 방지하기 위해 if(num == 2) return true;로 선언해줬다.

    만약 for문을 돌았는데 if문을 충족시키지 못한다면 소수라는 의미이므로 return true를 반환해주었다.

    1. for문을 벗어났을 때 cnt 값이 소수가 될 수 있는 경우의 수 이므로 이를 answer에 담아 출력한다.
    //전체 로직
    import java.util.Scanner;
    
    public class MakeSosu {
    
        public boolean validation(int num){
    
            if(num < 2) return false;
            if(num == 2) return true;
            for(int i = 2; i < num; i++){
                if(num % i == 0) return false;
            }
            return true;
        }
    
        public int solution(int[] nums) {
            int answer = -1;
    
            int cnt = 0;
    
            int n = nums.length;
    
            for(int i = 0; i < n; i++){
                for(int j = i+1; j < n; j++){
                    for(int k = j+1; k < n; k++){
                        if(k != 0) {
                            int tmp = nums[i] + nums[j] + nums[k];
                            if(validation(tmp)) cnt++;
                        }
                    }
                }
            }
    
            answer = cnt;
    
            return answer;
        }
    
        public static void main(String[] args) {
            MakeSosu T = new MakeSosu();
            Scanner in = new Scanner(System.in);
    
            int n = in.nextInt();
            int[] arr = new int[n];
    
            for(int i = 0; i < n; i++){
                arr[i] = in.nextInt();
            }
    
            System.out.print(T.solution(arr));
        }
    }
    

    '알고리즘' 카테고리의 다른 글

    [프로그래머스][lv2] 멀쩡한 사각형 Java  (0) 2023.02.01
    [프로그래머스][lv2] 점프와 순간이동 Java  (0) 2023.01.31
    [프로그래머스][lv2] 방문길이 Java  (0) 2023.01.31
    그리디 알고리즘  (0) 2022.01.05
    해쉬  (0) 2021.12.05
Designed by Tistory.