티스토리 뷰
[Java/Programmers]
Lv.1 소수 만들기
( summer/winter coding (~2018) )
⬇︎ ⬇︎ ⬇︎ 문 제 링 크 ⬇︎ ⬇︎ ⬇︎
programmers.co.kr/learn/courses/30/lessons/12977
입/출력
(입력)
숫자들이 들어있는 배열 nums
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
(출력)
nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수
풀이
public static int solution(int[] nums) {
int answer = 0;
for(int i = 0; i < nums.length - 2; i++) {
for(int j = i + 1; j < nums.length - 1; j++) {
for(int k = j + 1; k < nums.length; k++) {
// 숫자 세개 더하기
int sum = nums[i] + nums[j] + nums[k];
// sum 값 소수 판별
if(isPrime(sum)) {
answer++;
}
}
}
}
return answer;
}
// 소수 판별 메소드
public static boolean isPrime(int number) {
// 0 과 1
if(number == 0 || number == 1) {
return false;
}
// 2
if(number == 2) {
return true;
}
// 그 외 숫자
// 제곱근 함수 : Math.sqrt()
for(int i = 2; i <= Math.sqrt(number); i++) {
// 소수가 아닐경우
if(number % i == 0) {
return false;
}
}
// 반복문에서 벗어난 경우 약수가 자기 자신과 1밖에 없는 경우이므로 true 반환.
return true;
}
후기
음.... 풀이방법이 바로 생각나지 않는건 아니었는데,
중첩 for문 쓰기 싫어서 조합으로 해보려다가 잘 안되서 그냥 중첩 for문을 사용해 문제를 해결했다.
검색해봐도 조합으로 푼 풀이는 잘 안나오길래 그냥 포기...ㅠㅠ
정답 맞춘 후 다른 분들 코드 보니까 조합으로 푼 코드가 더 복잡하고 길길래 중첩 for문으로 푸는게 더 나을수도 있겠다는 생각을 했다.
참고 링크
youngest-programming.tistory.com/283
'Algorithm' 카테고리의 다른 글
[Java/Programmers] Lv.1 신규 아이디 추천 (0) | 2021.04.10 |
---|---|
[Java/Programmers] Lv.1 두 개 뽑아서 더하기 (0) | 2021.04.09 |
[Java/Programmers] Lv.2 카카오프렌즈 컬러링북 (0) | 2021.04.08 |
[Java/Programmers] Lv.1 폰켓몬 (0) | 2021.04.07 |
[Java/백준(boj)] 2010번. 플러그 (0) | 2021.03.06 |
댓글