programmers.co.kr/learn/courses/30/lessons/68644
[문제 설명]
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
numbers | result |
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
[풀이]
숫자가 작기 때문에 2중 반복문을 통해 모든 더한 경우의 수를 뽑고, HashSet이나 ArrayList의 contains 메서드를 써도 되지만 중복이 없는 조합으로 문제를 해결했다.
[코드]
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
|
ArrayList<Integer> al;
public void comb(int[] numbers, int[] combArr, int idx , int target, int n, int r) {
if(n == r) {
if(!al.contains(combArr[0]+ combArr[1])) {
al.add(combArr[0]+ combArr[1]);
}
return ;
}else if(target == numbers.length) {
return;
}else {
combArr[idx] = numbers[target];
comb(numbers, combArr, idx+1, target+1, n+1, r);
comb(numbers, combArr, idx, target+1, n, r);
}
}
public int[] solution(int[] numbers) { // 숫자배열
al = new ArrayList<Integer>();
int[] combArr = new int[2];
comb(numbers, combArr, 0,0,0,2);
return al.stream().sorted().mapToInt(Integer::intValue).toArray();
}
|
cs |
느낀 점: 조합을 다시 상시 시킬 수 있어서 좋았던 문제. 챌린지 당시에 바빠서 참여를 못했는데 10월에 있는 월간 코드 챌린지에는 참여할 수 있을 것 같다.
반응형
'코딩테스트 > 프로그래머스 level 1' 카테고리의 다른 글
[프로그래머스 level_1/2021 Dev-Matching: 웹 백엔드 개발자(상반기)] 로또의 최고 순위와 최저 순위 for JAVA (0) | 2021.04.28 |
---|---|
[프로그래머스 level_1/찾아라 프로그래밍 마에스] 폰켓몬 for JAVA (0) | 2021.03.09 |
[프로그래머스 level_1] 하샤드 수 for PYTHON (0) | 2020.06.12 |
[프로그래머스 level_1] 자릿수 더하기 for JAVA (0) | 2020.05.13 |
[프로그래머스 level_1] 짝수와 홀수 for JAVA (0) | 2020.05.13 |