집합의 원소 수가 적은 것부터 정답 리스트에 포함시켜야 하는 문제이다.
예를 들면, 두번째 입출력 예에서 2 / 2,1 / 1,2,3 / 1,2,3,4 순으로 탐색하여 2, 1, 3, 4를 만들어야 한다.
처음에는 hashmap을 만들어, 원소 수 1부터 n까지 리스트를 저장하려 했으나, 문자열을 다루는 것에서 막혀 다른 사람 풀이를 보았다.
1. 맨 앞의 "{{" 를 자른다.
2. 맨 뒤의 "}}" 를 자른다.
3. 중간의 "},{" 를 -로 바꾼다.
4. split() 함수를 이용하여 "-" 기준으로 잘라 String 배열에 담는다.
5. String 배열을 길이 기준으로 정렬한다.
6. 여기부터는 쉽지?
- "},{" 이 반복되니, 어떤 문자 하나로 바꾸는 스킬은 꽤 유용한 것 같다. 기억해두고 써먹어야지
- Arrays.sort에서 compare 함수를 오버라이딩 하여 정렬 기준을 정하는 방법
- String.class의 split("기준")함수는 기준을 기준으로 잘라서 String[]에 넣는다.
import java.util.*; // class Solution { public List<Integer> solution(String s) { int[] answer = {}; // List<Integer> list = new ArrayList<>(); // s = s.substring(2); //{{ 슬라이싱 s = s.substring(0, s.length() - 2); //}} 슬라이싱 s = s.replace("},{", "-"); //숫자 사이를 -로 통일 // String[] tokens = s.split("-"); // - 기준으로 잘라서 배열에 넣기 // //문자열 길이 순으로 정렬. ex) 1 3,1 4,3,1 Arrays.sort(tokens, new Comparator<String>(){ public int compare(String o1, String o2){ return Integer.compare(o1.length(), o2.length()); } }); // for(String token : tokens){ String[] nums = token.split(","); for(String num : nums){ Integer number = Integer.parseInt(num); if(!list.contains(number)){ list.add(number); } } } // return list; } }
++ 프로그래머스 solution 리턴 바꿔도 되네 ㅋㅋ
더 작성해주시오