Algorithm
[Algorithm] 2019 카카오 인턴십 - 튜플 (Map 정렬하기)
YEJINEE
2020. 8. 29. 00:51
문제
2019 카카오 인턴십 - 튜플
코딩테스트 연습 - 튜플
"{{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
풀이
- 주어진 튜플에 많이 등장하는 순서대로 숫자 배열을 만들어 리턴해야한다
- 튜플에 중복이 허용되지 않기 때문에 map에 key값으로 튜플의 원소 값을 넣고 value로 빈도수를 계산해 정렬해서 사용했다
- sortByValue()는 map의 value를 기준으로 내림차순으로 정렬하여 반환하는 함수이다
- Map.Entry<K, V> : key와 value로 하나의 쌍을 이루는 map entry자료형
- map.entrySet() : key와 value를 묶어 Set 형식으로 반환한다
public static int[] solution(String s) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
String[] arr = s.split(",");
for(int i=0; i<arr.length; i++) {
arr[i] = arr[i].replace("{", "");
arr[i] = arr[i].replace("}", "");
map.put(arr[i], map.getOrDefault(arr[i], 0)+1);
}
List<Map.Entry<String, Integer>> result = sortByValue(map);
int[] answer = new int[map.size()];
for(int i=0; i<result.size(); i++)
answer[i] = Integer.parseInt(result.get(i).getKey());
return answer;
}
// [2=4, 1=3, 3=2, 4=1] 반환
static List<Map.Entry<String, Integer>> sortByValue(HashMap<String, Integer> map) {
List<Map.Entry<String, Integer>> entries = new LinkedList<Map.Entry<String,Integer>>(map.entrySet());
Collections.sort(entries, (o1, o2)-> o2.getValue().compareTo(o1.getValue()));
return entries;
}