[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 |