문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/178871

제한 사항

입출력 예

풀이
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Collections;
class Solution {
public String[] solution(String[] players, String[] callings) {
int min;
final int playersLength = players.length;
String[] answer = new String[playersLength];
HashMap<String, Integer> playersRank = new HashMap<>();
HashMap<String, Entry<String, String>> threePlayers = new HashMap<>();
playersRank.put(players[0], playersLength - 1);
threePlayers.put(players[0], new HashMap.SimpleEntry<>("", players[1]));
for (int i = 1; i < playersLength - 1; i++) {
playersRank.put(players[i], playersLength - (i + 1));
threePlayers.put(players[i], new HashMap.SimpleEntry<>(players[i - 1], players[i + 1]));
}
playersRank.put(players[playersLength - 1], 0);
threePlayers.put(players[playersLength - 1], new HashMap.SimpleEntry<>(players[playersLength - 2], ""));
for (int i = 0; i < callings.length; i++) {
String previousPlayer = threePlayers.get(callings[i]).getKey();
String previousPlayer2 = threePlayers.get(previousPlayer).getKey();
String nextPlayer = threePlayers.get(callings[i]).getValue();
playersRank.put(callings[i], playersRank.get(callings[i]) + 1);
playersRank.put(previousPlayer, playersRank.get(previousPlayer) - 1);
if (!previousPlayer2.equals(""))
threePlayers.put(previousPlayer2
, new HashMap.SimpleEntry<>(threePlayers.get(previousPlayer2).getKey(), callings[i]));
String tempPreviousPlayerKey = threePlayers.get(previousPlayer).getKey();
threePlayers.put(previousPlayer, new HashMap.SimpleEntry<>(callings[i], nextPlayer));
threePlayers.put(callings[i], new HashMap.SimpleEntry<>(tempPreviousPlayerKey, previousPlayer));
if (!nextPlayer.equals(""))
threePlayers.put(nextPlayer, new HashMap.SimpleEntry<>(previousPlayer, threePlayers.get(nextPlayer).getValue()));
}
min = Collections.min(playersRank.values());
playersRank.forEach((key, value) -> {
answer[playersLength - (value - min + 1)] = key;
});
return answer;
}
}
후기
전에 풀기를 시도했지만 풀지 못 했던 문제... 그 놈의 시간 초과 때문에 고생하다가 오늘 겨우 풀었다. 그런데 풀고 나서 다른 사람들 풀이를 보니까 나처럼 힘들게 푼 사람이 없었다... 풀이를 보니까 HashMap<String, Integer>를 사용하면 쉽게 풀 수 있었다. 생각을 너무 깊게 하니까 거기서 벗어나지 못하고 쉽게 풀 수 있는 방법을 놓친 것 같다. 다양한 생각을 할 수 있는 능력을 좀 길러야겠다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 1] 과일 장수 (0) | 2023.07.02 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 명예의 전당 (0) | 2023.07.01 |
| [프로그래머스][JAVA][Lv. 1] 문자열 나누기 (0) | 2023.06.30 |
| [프로그래머스][JAVA][Lv. 1] 가장 가까운 글자 (0) | 2023.06.30 |
| [프로그래머스][JAVA][Lv. 1] 크기가 작은 부분 문자열 (0) | 2023.06.29 |