728x90
반응형
2022.03.06
85번째 포스팅
입사 363일차.
코테 문제풀이 15주차 1번 문제
0. 문제
① Summer/Winter Coding(~2018) : 소수 만들기
② 설명
문제설명 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요. 제한사항
|
③ 링크
1. 접근방법
생각해낸 방법은 2가지
① 3차원배열
② dfs 재귀호출
2. 풀이
① 접근방법 : ②
② 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
import java.util.*;
class Solution {
/*
* Date 2022-03-06
* Time 22:10
*/
/*
* 전역변수선언
* 1. int[] numArr(= nums)
* 2. HashSet set 중복여부체크
* 3. int answer 소수갯수
*/
public static int[] numArr;
public static HashSet<Integer> set;
public static int answer = 0;
public int solution(int[] nums) {
numArr = nums;
set = new HashSet<>();
dfs(0, 0, 0);
return answer;
}
/*
* 메소드명: chckPrimeNumber
* 파라미터로 들어온 숫자의 소수여부판별
*/
public void chckPrimeNumber(int number) {
if (number < 2) {
return;
}
int sqrtNum = (int)Math.sqrt(number);
for (int i = 2; i <= sqrtNum; i++) {
if (number % i == 0) {
return;
}
}
answer++;
}
/*
* 메소드명: dfs
* 완전탐색
*/
public void dfs(int size, int depth, int sumNum) {
/*
* Validation
* 3개의 수를 더한 경우
* 1. 소수판별
* 2. return
*/
if (size == 3) {
chckPrimeNumber(sumNum);
return;
}
/*
* Validation
* 재귀의 횟수가 고정배열의 length와 같아질 경우
* 1. return
*/
if (depth == numArr.length) return;
/*
* 재귀시작
* 1. 다음 index를 차례대로 더하며 재귀호출 (depth + 1)
* 2. nums.length가 3보다 큰 경우, 다음 index를 건너뛰면서 재귀호출 (depth)
*/
dfs(size + 1, depth + 1, sumNum + numArr[depth]);
dfs(size, depth + 1, sumNum);
}
}
|
cs |
3. 결과
4. 주의사항
① 중복제거를 해서는 안된다 (1 + 2 + 8와 1 + 3 + 7은 같은 11로 소수이지만 각각의 개수로 쳐줘야한다.)
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[코테/JAVA] 위클리 챌린지 : 최소직사각형 (0) | 2022.03.13 |
---|---|
[코테/JAVA] 완전탐색 : 모의고사 (0) | 2022.03.07 |
[코테/JAVA] 완전탐색 : 소수 찾기 (0) | 2022.02.27 |
[코테/JAVA]깊이/너비 우선 탐색(DFS/BFS) : 타겟 넘버 (0) | 2022.02.13 |
[코테/JAVA] 그래프: 가장 먼 노드 (2) | 2022.02.06 |
댓글