[프로그래머스 알고리즘] 튜플 (level 2)

Seongho·2023년 9월 12일
0

문제

풀이

집합의 원소 수가 적은 것부터 정답 리스트에 포함시켜야 하는 문제이다.
예를 들면, 두번째 입출력 예에서 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 리턴 바꿔도 되네 ㅋㅋ

profile
Record What I Learned

1개의 댓글

comment-user-thumbnail
2023년 9월 18일

더 작성해주시오

답글 달기