Problem
집합이 문자열 s
로 주어졌을 때 해당 집합이 표현하는 튜플을 배열에 담아 return 하는 문제입니다.
Solution
이 문제의 핵심은 개수가 많은 값 순서대로 배열을 정렬하는 겁니다.
집합 별로 분리할 필요 없이 먼저 숫자만 구해줍니다.
s
는 '{', '}', ','
와 숫자로만 이루어져 있다고 문제에 나와있기 때문에 중괄호를 제거하고 쉼표를 기준으로 split
해줍니다.
그리고 각 값들을 Key 로 하고 개수를 value 로 한 keyMap
을 만들어줍니다.
개수를 기준으로 정렬해야하기 때문에 keyMap
에서 key, value 를 뒤집은 valueMap
을 만들어줍니다.
그리고 answer
배열에 valueMap
에 있는 값을 순서대로 넣어주면 됩니다.
숫자의 갯수가 key 로 되어 있기 때문에 배열의 뒤에서부터 넣어주면 개수가 가장 많은 숫자가 맨 앞으로 오게 됩니다.
Java Code
import java.util.*; class Solution { public int[] solution(String s) { Map<Integer, Integer> keyMap = new HashMap<>(); Map<Integer, Integer> valueMap = new HashMap<>(); String[] strs = s.replace("{", "").replace("}", "").split(","); for (String str : strs) { int key = Integer.parseInt(str); keyMap.compute(key, (k, v) -> v == null ? 1 : v + 1); } keyMap.forEach((k, v) -> valueMap.put(v, k)); int n = valueMap.size(); int[] answer = new int[n]; for (int i = 1; i <= n; i++) { answer[n-i] = valueMap.get(i); } return answer; } }
'알고리즘 문제 > Programmers' 카테고리의 다른 글
[프로그래머스] 2019 카카오 겨울인턴. 호텔 방 배정 (Java) (0) | 2020.05.12 |
---|---|
[프로그래머스] 2019 카카오 겨울인턴. 불량 사용자 (Java) (0) | 2020.05.12 |
[프로그래머스] 2019 카카오 겨울인턴. 크레인 인형뽑기 게임 (Java) (0) | 2020.05.12 |
[프로그래머스] 체육복 (Java) (1) | 2020.03.27 |
[프로그래머스] 위장 (Java) (0) | 2019.11.26 |