알고리즘
프로그래머스 - 두 개 뽑아서 더하기
Heidong
2022. 7. 11. 16:01
반응형
내 풀이
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class P_37 {
public int[] solution(int[] numbers) {
ArrayList<Integer> list = new ArrayList<>();
int check = 0;
for(int i=0; i<numbers.length-1; i++) {
for(int j=i+1; j<numbers.length; j++) {
check = numbers[i] + numbers[j];
if(! list.contains(check)) {
list.add(check);
}
}
}
Collections.sort(list);
int[] answer = list.stream().mapToInt(Integer::intValue).toArray();
return answer;
}
public static void main(String[] args) {
// 두 개 뽑아서 더하기
P_37 p = new P_37();
int[] x = {2,1,3,4,1};
System.out.println(Arrays.toString(p.solution(x)));
}
}
sort(), contains()를 사용하기 위해서 배열 형태가 아니라 리스트 형태로 풀었다.
Integer의 리스트를 int 배열로 돌리기에는 반복문아니면 stream을 통한 람다로 풀어야 한다.
다른 사람 풀이
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int[] numbers) {
Set<Integer> set = new HashSet<>();
for(int i=0; i<numbers.length; i++) {
for(int j=i+1; j<numbers.length; j++) {
set.add(numbers[i] + numbers[j]);
}
}
return set.stream().sorted().mapToInt(Integer::intValue).toArray();
}
}
HashSet -> 중복을 허용하지 않음.
중복값을 HashSet에 값을 add해도 추가가 되지 않음.
Set의 클래스중 하나인 HashSet 말고 TreeSet을 사용해도 된다.
HashSet과 TreeSet의 차이점으로는 HashSet보다 TreeSet이 추가, 삭제는 느리지만 검색과 정렬은 더 유리하다.
https://coding-factory.tistory.com/555
다른 사람 풀이2
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
class Solution {
public static ArrayList<Integer> solution(int[] numbers) {
ArrayList<Integer> answer = new ArrayList<>();
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = i + 1; j < numbers.length; j++) {
set.add(numbers[i] + numbers[j]);
}
}
Iterator<Integer> iter = set.iterator();
while(iter.hasNext()) {
answer.add(iter.next());
}
Collections.sort(answer);
return answer;
}
}
마찬가지로 Set을 이용한 풀이 방법.
Iterator를 사용해서 객체 자체를 가져와서 while문으로 돌린 모습.
정렬을 하기 위해서 list에 담은 모습인데 stream을 활용하여 sorted()를 사용했다면 더 간결하게 표현이 가능 했을 것이다.
반응형