일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Gem
- MYSQL
- C++
- 파이썬
- java
- SWEA
- 스포티파이
- 회귀
- Baekjoon
- regression
- modern c++
- SW Expert Academy
- programmers
- spotify
- SECS
- 비트겟
- Computer Science
- c
- Spring
- 프로그래머스
- 자바
- Spotify Api
- CS
- Spring JPA
- SECS-II
- 회원가입
- spring boot
- SECS/GEM
- 백준
- python
Archives
- Today
- Total
비버놀로지
[Programmers 프로그래머스] 12977 소수 만들기 본문
728x90
programmers.co.kr/learn/courses/30/lessons/12977
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
numsresult
[1,2,3,4] | 1 |
[1,2,7,6,4] | 4 |
입출력 예 설명
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.
DFS 방식으로 먼저 입력값 중 3개를 뽑아 더해 줍니다.
그렇게 더해진 값을 check를 통해 소수인지 확인해 준후, 소수라면 결과값에 1을 더해줍니다.
class Solution {
public int answer;
public int solution(int[] nums) {
answer = 0;
find(0, 0, nums, 0);
return answer;
}
public void find(int cnt, int start, int nums[], int result) { //3개씩 짝을 지어준다.
if (cnt == 3) {
if (check(result)) {
answer++;
}
return;
}
for (int i = start; i < nums.length; i++) {
result += nums[i];
find(cnt + 1, i + 1, nums, result);
result -= nums[i];
}
}
public boolean check(int result) { //소수인지 체크해 준다.
for (int i = 2; i < result / 2; i++) {
if (result % i == 0) {
return false;
}
}
return true;
}
}
728x90
'ALGORITM > JAVA' 카테고리의 다른 글
[Programmers 프로그래머스] 62048 멀쩡한 사각형 (0) | 2021.03.06 |
---|---|
[Programmers 프로그래머스] 42587 프린터 (0) | 2021.03.06 |
[Programmers 프로그래머스] 1845 폰켓몬 (0) | 2021.03.06 |
[Programmers 프로그래머스] 72410 신규 아이디 추천 (0) | 2021.03.05 |
[BAEKJOON 백준] 17608 막대기 (0) | 2021.03.05 |
Comments