public int solution(int[] nums)
{
int answer = 0;
for(int i = 0; i < nums.Length ; ++i){
for(int j = i + 1; j < nums.Length ; ++j){
for(int k = j + 1; k < nums.Length ; ++k){
int one = nums[i] + nums[j] + nums[k];
if(check(one)){
answer++;
}
}
}
}
return answer;
}
bool check(int n) {
if(n < 2) return false;
for(int i = 2; i * i <= n; ++i) {
if(n % i == 0) return false;
}
return true;
}
다른사람의 코드를 보고 도움을 받았다.
내가 짰던 코드는 알고리즘 자체는 비슷하다 효율이 떨어졌다.
먼저 3개의 수를 더하는 for문은 같았다.
이후 합의 결과를 list에 add하고 수가 중복된다면 add하지 않도록 했다.
그리고 모든 수를 1부터 해당 수까지(ex 17) 나누기를 시행하도록 했다 (ex 17%1, 17%2, 17%3 ...)
그때 나눈 나머지가 0이 되는 수를 count라는 list에 추가했고 그 리스트의 길이가 2가 되는 경우, 그리고 그 요소가 1과 해당 수(ex 17) 일 경우에만 answer를 ++ 하는 방식으로 했다.
하지만 대부분의 테스트케이스를 통과하지 못했다.
그에 비해 위의 코드는 숫자 세개의 합을 바로 매개변수로 하여 bool값을 반환하는 함수를 만들었고 소수가 아닌경우를 상정하여 fasle를 반환, 그 외의 경우는 소수가 되어 true를 반환하도록 했다.
'개?발 > 프로그래머스' 카테고리의 다른 글
추억점수(Java) (0) | 2024.05.13 |
---|---|
프로세스 (C#) (0) | 2024.05.03 |
문자열 내림차순으로 배치하기 (C#) (0) | 2024.05.01 |
모의고사 (C#) (0) | 2024.04.30 |
카드 뭉치 (0) | 2024.04.30 |