티스토리 뷰
문제
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
nums | result |
[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을 만들 수 있습니다.
첫 풀이(실패)
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
HashSet<Integer> set = new HashSet<>();
for(int i =0; i < nums.length ; i++){
if(i+2 >= nums.length){
break;
}
for(int j = i +1 ; j < nums.length ; j++){
for(int k = i +2 ; k <nums.length ; k++){
set.add(nums[i]+nums[j]+nums[k]);
}
}
}
for(int sum : sumList){
answer++;
for(int count = 2; count < sum; count++){
if(sum % count == 0 ){
answer--;
break;
}
}
}
return answer;
}
}
처음에는 HashSet을 이용하였다가 뒤늦게 다른 수들의 합이 중복이 될 수 있겠다는 생각이 들었다.
예시만 보고 작업했을때는 합 중복이 없어서 전에 써봤던 HashSet을 써보기로 한것이 내 발목을 잡았다.
완성
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
ArrayList<Integer> sumList = new ArrayList<Integer>();
for(int i = 0; i < nums.length; i++) {
if(i + 2 >= nums.length) {
break;
}
for(int j = i + 1; j < nums.length; j++) {
for(int k = j + 1; k < nums.length; k++) {
sumList.add(nums[i] + nums[j] + nums[k]);
}
}
}
for(int sum : sumList){
answer++;
for(int count = 2; count < sum; count++){
if(sum % count == 0 ){
answer--;
break;
}
}
}
return answer;
}
}
이번에는 ArrayList로 합들을 담았다.
그리고 반복문을 돌려 2이상의 수를 나누어 나머지가 0이나오면 answer--시키고 break를 시켰다.
다른 분의 풀이를 보고 해본 코드
class Solution {
public boolean check(int n){
for(int i = 2; i < n ; i++){
if(n%i == 0){
return false;
}
} return true;
}
public int solution(int[] nums) {
int answer = 0;
int sum;
for(int i = 0; i < nums.length; i++) {
if(i + 2 >= nums.length) {
break;
}
for(int j = i + 1; j < nums.length; j++) {
for(int k = j + 1; k < nums.length; k++) {
sum = nums[i] + nums[j] + nums[k];
if(check(sum)){ answer++; }
}
}
}return answer;
}
}
다른 사람들의 풀이를 봤을때 따로 메소드를 빼내서 사용할 수도 있겠다는걸 또 한번 느꼈다.
이렇게 따로 소수를 확인하는 구문을 빼내니 가독성이 더 좋아진것 같다.
'프로그래머스 문제' 카테고리의 다른 글
[프로그래머스](카카오 인턴) 키패드 누르기 (java) (0) | 2021.06.24 |
---|---|
[프로그래머스] 모의고사 (java) (0) | 2021.06.18 |
[프로그래머스]폰켓몬 (java) (0) | 2021.06.10 |
[프로그래머스]신규 아이디 추천 (0) | 2021.06.09 |
[프로그래머스] k번째수 (0) | 2021.06.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- request
- NAV
- RequestDispatcher
- span
- scriptlet
- dl
- Declaration
- 실기
- padding
- 정보산업처리기사
- getParameter
- link href
- forward
- id
- this.
- 정처산기
- 자격증
- pageContext
- CLASS
- application
- Expression
- div
- 독학
- 합격
- 정처기
- Redirect
- session
- Margin
- jsp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함