문제 설명 |
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요. |
제한 조건 |
|
입출력 예 |
|
nums | return |
[1,2,3,4] | 1 |
[1,2,7,6,4] | 4 |
|
나의 풀이
1. 숫자 세개를 추출하기 위해 세번의 for문을 돌림. (첫번째=0부터, 두번째=첫번째+1부터, 세번째=두번째+1부터)
2. 추출한 세개의 숫자를 더한 값이 소수인지 여부 판별 (2부터 sum까지 나누어떨어지는 수가 있는지 확인)
3. 소수인 경우 answer+1
class Solution {
public int solution(int[] nums) {
int answer = 0;
/* i = 0부터 nums의 크기까지 for문 (첫번째 숫자) */
for (int i=0; i<nums.length-2; i++) {
/* j = 0부터 nums의 크기까지 for문 (두번째 숫자) */
for (int j=i+1; j<nums.length-1; j++) {
/* k = 0부터 nums의 크기까지 for문 (세번째 숫자) */
for (int k=j+1; k<nums.length; k++) {
int sum = nums[i] + nums[j] + nums[k];
int count = 0;
for (int z=2; z<sum; z++) {
if (sum % z == 0) count++;
}
if (count == 0) answer++;
}
}
}
return answer;
}
}
for문을 세개나 돌리는 순간 부터 효율성은 확 떨어진다고 생각된다. 조금 더 효율적이고 간단한 코드로 구현하고 싶다. 근데 다른사람들도 다 그렇게 풀었네ㅋㅋㅋㅋㅋ |
'프로그래머스 > Java | Level1' 카테고리의 다른 글
[프로그래머스/Java]Level1 - 신규 아이디 추천 (0) | 2021.09.15 |
---|---|
[프로그래머스/Java]Level1 - [1차] 비밀지도 (0) | 2021.09.13 |
[프로그래머스/Java]Level1 - 가운데 글자 가져오기 (0) | 2021.08.25 |
[프로그래머스/Java]Level1 - 실패율 (0) | 2021.08.16 |
[프로그래머스/Java]Level1 - 두 개 뽑아서 더하기 (0) | 2021.01.25 |