알고리즘/프로그래머스
프로그래머스 - 튜플프로그래머스 - 튜플
dev.moon
2021. 4. 5. 00:40
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;
}
}