[2021-05-27] 두 개 뽑아서 더하기

2021. 5. 27. 21:04코딩테스트

푼 시간 : 30분

언어 : 자바

 


 

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

 

문제를 처음에 풀 때는 고민을 엄청 했다.

중복을 잡아야 한다는 생각이 좀 크지만, 뭔가 해쉬맵을

쓰지 않고 푸는법은 없을까 고민을 많이 했는데

 

쓸데없이 배열을 하나 더 만들거나 메모리 낭비만 할것같아,

그냥 해쉬맵으로 풀었다.

Iterator객체로 만들고 순서를 매기는건 정말 편한 것 같다.

 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer;
        
        HashMap<Integer, Integer> map=new HashMap<>();
        // 해쉬맵은 중복이 안된다.
        
        for(int i=0; i<numbers.length-1; i++){
            for(int j=i+1; j<numbers.length; j++){
                map.put((numbers[i]+numbers[j]), (numbers[i]+numbers[j]));
                // 어차피 중복이 안되기에, 그냥 맵에 더한 결과를 다 넣어버림
            }
        }
        answer=new int[map.size()];
        // answer의 크기를 맵 사이즈로 잡음.(중복이 안되서)
        
        Set<Integer> keys=map.keySet();
        // 연산을 하기 위해 Set으로
        Iterator<Integer> input=keys.iterator();
        // 범위가 없기에 Iterator로 범위에 대한 연산
        
        int count=0;
        while(input.hasNext()){
        // 값이 있으면 true
            answer[count]=input.next();
            // 값을 넣어준다.
            count++;
        }
        
        Arrays.sort(answer);
        // 문제에 정렬을 해야한다는 조건
        return answer;
    }
}

'코딩테스트' 카테고리의 다른 글

[2021-06-10] 124나라의 숫자 (lv2)  (0) 2021.06.10
[2021-05-28] 폰켓몬  (0) 2021.05.28
[2021-05-25] 약수의 개수와 덧셈  (0) 2021.05.25
[2021-05-05] 소수 찾기  (0) 2021.05.05
[2021-05-03] 음양 더하기  (0) 2021.05.03