프로그래머스 - 튜플프로그래머스 - 튜플
알고리즘/프로그래머스

프로그래머스 - 튜플프로그래머스 - 튜플

programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

1. 유형

튜플

 

2. 풀이

  • 문자열 파싱
  • HashMap<원소의 숫자, 나오는 횟수>
  • 횟수 순으로 정렬

- 문자열에 {} 와 콤마가 들어있어서 전처리를 해준다.

 

- 맨 처음 튜플을 알기 위해서 각 요소에서 숫자가 얼마나 나오는지 확인해야한다.

 

{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

 

예시에서 2가 4번, 1이 3번, 3이 2번, 4가 1번 즉, 2 1 3 4순서가 정답

 

- 정렬할 때 우선순위를 정하고 정렬

 

3. 코드

import java.util.*;
class Solution {
    public int[] solution(String s) {
        int[] answer = {};
        s=s.substring(1, s.length()-1);
        String elements[] = s.split("}");
        HashMap<Integer, Integer> map = new HashMap<>();
        for(String element: elements){
           String e[] = element.split("\\{");
           for(String tmp: e){
               if(tmp.equals(",")) continue;
               String num[] = tmp.split(",");
               for(String n:num){
                   if(n.equals(""))continue;
                   int k = Integer.parseInt(n);
                   map.put(k, map.getOrDefault(k, 0)+1);
               }
           }
        }
        List<int[]> list = new ArrayList<>();
        for(Map.Entry<Integer, Integer> entry:map.entrySet()){
            list.add(new int[]{entry.getKey(), entry.getValue()});
        }
        Collections.sort(list, new Comparator<int[]>(){
            public int compare(int[] o1, int[] o2){
                return -(o1[1] - o2[1]);
            }
        });
        answer = new int[list.size()];
        int idx=0;
        for(int[] l: list){
            answer[idx++] = l[0];
        }
        return answer;
    }
}