-
프로그래머스 - 두 개 뽑아서 더하기알고리즘 2022. 7. 11.반응형
내 풀이
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()를 사용했다면 더 간결하게 표현이 가능 했을 것이다.
반응형'알고리즘' 카테고리의 다른 글
프로그래머스 - 3진법 뒤집기 (0) 2022.07.22 프로그래머스 - 예산 (0) 2022.07.21 프로그래머스 - 비밀 지도 [2018 KAKAO BLIND RECRUITMENT] (0) 2022.07.06 프로그래머스 - 나머지가 1이 되는 수 찾기 (0) 2022.07.04 프로그래머스 - 2016년 (0) 2022.07.01