알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 두 개 뽑아서 더하기

류창 2021. 8. 13. 21:27
반응형

 

문제분석

 

문제는 간단하다 numbers의 2개의 갯수를 더한뒤 중복없이 가능한 숫자들을 오름차순으로 나열하는것이다.

 

중복없이, 그리고 오름차순으로 나열하는게 핵심이다.

 

중복없이 자료를 걸러주는 배열이 있다. 그건 바로 HashSet이다.

 

Set에는 3종류가있다. HashSet, TreeSet, LinkedHashSet이 있다.

 

HashSet:  중복없이 자료를 걸러주는 배열. 하지만 순서가 보장되지않음.(정렬이안됨)

TreeSet:  중복없이 자료를 걸러주는데 기본적으로 오름차순 정렬까지해준다.

LinkedHashSet: 중복없이 자료를 걸러주는데, 자료가 입력받은순서대로 저장된다.

 

여기서 우린 TreeSet을 사용할것이다.

 

Set은 자료를 뽑아올때 list나 Array처럼 index로 뽑아오지못한다. 

그래서, Iterator (반복자)로 Set을 순회하면서 뽑아와야한다.

 

Iterator의 대표적 메소드는 기억해두자.

hasNext() : 읽어올 다음 요소가 있는가?

next(): 읽을 다음데이터를 반환

remove(): next()로 읽어온값을 삭제

 

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.*;
class Solution {
    public int[] solution(int[] numbers) {
        TreeSet<Integer> ts = new TreeSet<>();
        
        for(int i=0;i<numbers.length;i++){
            for(int j=i+1;j<numbers.length;j++){
                ts.add(numbers[i]+numbers[j]);
            }
        }
        
        int[] answer = new int[ts.size()];
        int cnt=0;
        // 반복자 생성
        Iterator<Integer> it= ts.iterator();
        while(it.hasNext()){
            answer[cnt++]=it.next();
        }
        
        return answer;
    }
}
cs

 

반응형