코딩테스트/프로그래머스 level 1

[프로그래머스 level_1 /월간 코드 챌린지 시즌 1] 두 개 뽑아서 더하기 for JAVA

냠냠:) 2020. 9. 21. 12:00

programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

 

programmers.co.kr

 

[문제 설명]

정수 배열 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월에 있는 월간 코드 챌린지에는 참여할 수 있을 것 같다.

반응형