문제풀이/프로그래머스
소수 만들기 / 프로그래머스 연습문제 / programmers / level1 / java
RUCKUS
2021. 5. 3. 10:00
programmers.co.kr/learn/courses/30/lessons/12977
코딩테스트 연습 - 소수 만들기
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때
programmers.co.kr
이번 문제도 소수 관련 문제다.
근데 단순히 소수냐 아니냐 보다는 경우의 수가 난 더 중요하게 느껴졌다.
주어지는 배열에서 3가지의 숫자가 얼마만큼 조합이 되는지를 알아야하기 때문이다.
포문으로 해야 될 것 같다 까지는 알겠는데, 어떻게 구현할지 많이 애를 먹었다.
약 2시간 머리를 쓴 결과
그 결과 나의 코드
public static void main(String[] args) {
int[] nums = {1, 2, 6, 7, 4};
solution(nums);
}
public static int solution(int[] nums) {
int answer = 0;
// 3중 포문으로 3개씩 더할 수 있는 모든 경우의 수를 구해준다.
for (int i = 0; i < nums.length-2; i++) {
// 3개씩 더해야 하니 첫 번째 포문은 배열 길이의 -2번만 돌릴거다. 그럼 여기서는 0,1,2 까지 총 3번 반복한다.
for (int j = i+1; j < nums.length-1; j++) {
// 2번째 포문은 첫번째 포문 시작 점+1부터 배열 길이의 -1번 만 돌릴거다. 그럼 여기서는 1,2,3 까지 총 3번 반복한다.
for (int k = j+1; k < nums.length; k++) {
// 3번째 포문은 두번째 포문 시작점 +1부터 배열 길이까지 돌릴거다. 그럼 여기서는 2,3,4 까지 총 3번 반복한다.
int temp = nums[i] + nums[j] + nums[k];
System.out.println("i : " + i + " j : " + j + " k : " + k);
if (primeCheck(temp)) {
answer++;
}
}
}
}
System.out.println(answer);
return answer;
}
public static boolean primeCheck(int n) {
// 소수 판별
boolean prime = true;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
prime = false;
break;
}
}
return prime;
}
소수를 판별하는건 이전에 해봐서 어렵지 않았다.
포문을 통해 배열의 사이즈와 초기값들을 통해서 경우의 수 만큼 명령문을 돌릴 수 있다는 걸 깨달았다.
경우의수...넘싫..ㅠ
[깃허브]
RUCKUSJERRY/practiceOfJava
Contribute to RUCKUSJERRY/practiceOfJava development by creating an account on GitHub.
github.com