✔ 소수 만들기
문제 분석하기
주어진 숫자 중 3개를 합한 값을 저장한 후, 이 값들이 소수인지 아닌지 판단하도록 함
손으로 풀어보기
- 주어진 숫자 중 3개를 골라 합한 값들을 저장
- 3중 for문을 이용해 숫자를 선택
- 합한 값들이 소수인지 아닌지 판단
- 2부터 반복하면서 나누어질 경우 소수가 아님
- 소수가 되는 경우의 개수를 반환
슈도코드 작성하기
nums(숫자들이 들어있는 배열)
answer(소수가 되는 경우의 수)
arr(주어진 숫자 중 3개의 수를 더한 값들)
for(i -> 0부터 nums의 길이 - 2만큼) {
for(j -> i + 1부터 nums의 길이 - 1만큼) {
for(k -> j + 1부터 nums의 길이만큼) {
arr에 (nums[i] + nums[j] + nums[k]) 추가
}
}
}
for(i -> arr의 크기만큼) {
if(소수 판단 함수가 true라면)
answer 증가
}
answer 반환
소수 판단 함수 {
for(i -> 2부터 절대값까지) {
if(현재 값이 i로 나누어떨어진다면)
false 반환
}
true 반환
}
코드 구현하기
/**
* 12977) 소수_만들기
*/
public class L032_12977 {
static int answer;
// nums(숫자들이 들어있는 배열)
public int solution(int[] nums) {
// arr(주어진 숫자 중 3개의 수를 더한 값들)
List<Integer> arr = new ArrayList<>();
// 3개의 수를 더하여 arr에 추가
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++) {
arr.add(nums[i] + nums[j] + nums[k]);
}
}
}
// answer(소수가 되는 경우의 수)
answer = 0;
for (int i = 0; i < arr.size(); i++) {
// 소수 판단 함수가 true라면
if (isPrime(arr.get(i)))
// answer 증가
answer++;
}
// answer 반환
return answer;
}
// 소수 판단 함수
private boolean isPrime(int num) {
for (int i = 2; i <= Math.sqrt(num); i++) {
// 현재 값이 i로 나누어떨어진다면
if (num % i == 0)
// 소수가 아니므로 false 반환
return false;
}
// 소수이므로 true 반환
return true;
}
// 테스트 케이스
public static void main(String[] args) {
L032_12977 solution = new L032_12977();
int[] nums = { 1, 2, 3, 4 };
int result = solution.solution(nums);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[17681] 비밀지도 (0) | 2023.12.29 |
---|---|
[12982] 예산 (0) | 2023.12.29 |
[12969] 직사각형 별찍기 (0) | 2023.12.29 |
[12954] x만큼 간격이 있는 n개의 숫자 (0) | 2023.12.29 |
[12950] 행렬의 덧셈 (0) | 2023.12.28 |