반응형
본 풀이는 java
언어를 사용하였습니다.
문제 보러가기
풀이
처음에 문제가 잘 이해가 안가서 문제 이해하는데 시간을 많이 썼는데, 아래와 같이 생각하니까 너무 쉬운 문제였다.
"{{2},{2,1},{2,1,3},{2,1,3,4}}"
위와같이 s 값이 들어온다면, 괄호마다 포함되는 숫자가 많을수록 앞의 숫자라는 말이된다.
숫자가 포함되는 횟수를 계산하면 아래와 같다.
2 : 4번
1 : 3번
3 : 2번
4 : 1번
가장 많은 순으로 내림차순하게 된다면 그 값이 정답이 된다.
정답 : [2, 1, 3, 4]
코드
import java.util.*;
public class Solution {
public int[] solution(String s) {
String[] textNumbers = removeBracket(s).split("\\|");
Map<Integer, Integer> map = getNumberCountMap(textNumbers);
List<Integer> listKeySet = getKeysOrderByCountDesc(map);
int[] answer = new int[listKeySet.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = listKeySet.get(i);
}
return answer;
}
private String removeBracket(String text) {
return text.substring(2, text.length() - 2)
.replace("},{", "|");
}
private Map<Integer, Integer> getNumberCountMap(String[] textNumbers) {
Map<Integer, Integer> map = new HashMap<>();
for (String textNumber : textNumbers) {
Arrays.stream(textNumber.split(","))
.forEach(no -> {
Integer number = Integer.parseInt(no);
if (map.containsKey(number)) {
map.put(number, map.get(number) + 1);
} else {
map.put(number, 1);
}
});
}
return map;
}
private List<Integer> getKeysOrderByCountDesc(Map<Integer, Integer> map) {
List<Integer> listKeySet = new ArrayList<>(map.keySet());
listKeySet.sort((value1, value2) -> map.get(value2).compareTo(map.get(value1)));
return listKeySet;
}
}
회고
예제를 보고는 도저히 이해가 안됬었는데, 위 풀이처럼 간단하게 생각하니까 너무 쉬운 문제였다..
문제를 빠르게 파악하는걸 보기위해 만든 문제인듯 싶음..
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
네트워크 (0) | 2023.03.10 |
---|---|
2021 카카오 채용연계형 인턴십 거리두기 확인하기 (0) | 2022.08.06 |
2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링 (0) | 2022.08.03 |
2020 KAKAO BLIND RECRUITMENT 괄호 변환 (0) | 2022.07.28 |
[1차] 다트게임 (0) | 2022.07.17 |
댓글