문제
https://school.programmers.co.kr/learn/courses/30/lessons/64065
풀이
튜플을 구하는 문제입니다. 자료구조로 map과 list를 이용했습니다.
우선 replace와 split을 통해 문자열에서 숫자만을 뽑았습니다. 그리고 숫자들의 각각의 갯수를 세어주는데, 이때 개수가 많을수록 앞쪽에 위치한 숫자입니다.
이 로직을 구현하기 위해 map에는 숫자를 key로 숫자가 나온 횟수를 value로 설정해주었고, cnt가 많은 순서대로 list에 추가했습니다.
아래는 소스 코드입니다.
소스 코드
import java.util.*;
class Solution {
public int[] solution(String s) {
int[] answer;
s = s.replace("{","");
s = s.replace("}","");
String[] str = s.split(",");
ArrayList<String> list = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
for(int i = 0; i<str.length;i++){
map.put(str[i],map.containsKey(str[i])?map.get(str[i])+1:1);
}
for(int cnt = str.length; cnt>=1;cnt--){
for(String key : map.keySet()){
if(map.get(key)==cnt) list.add(key);
}
}
answer = new int[list.size()];
for(int i = 0;i<list.size();i++){
answer[i] = Integer.parseInt(list.get(i));
}
return answer;
}
}