https://school.programmers.co.kr/learn/courses/30/lessons/178871
문제 접근
for 문만 사용하면 시간 초과가 발생합니다.
그래서 맵을 사용할까 생각했는데, 맵을 사용할 때 콜드 플레이어의 순위를 올릴 수는 있는데 추월당한 플레이어의 순위를 낮추는 방법이 생각이 안나네요.
나는 고개를 돌려 마침내 돌아서서 찾았다.
맵에서 플레이어의 순위를 플레이어 배열에 대한 인덱스로 사용합니다.
추월당한 선수이름 온도에 저장, 후 추격자바꾸다 호출된 플레이어이름을 넣어 플레이어의 위치 지정아니요
온도(추월당한 선수의 이름)넣어
위치가 변경되었습니다.
import java.util.*;
class Solution {
public String() solution(String() players, String() callings) {
Map<String, Integer> playersMap = new HashMap<>();
for(int i=0; i<players.length; i++) playersMap.put(players(i), (i+1));
for(int i=0; i<callings.length; i++) {
String temp = "";
temp = players(playersMap.get(callings(i))-2);
players(playersMap.get(callings(i))-2) = players(playersMap.get(callings(i))-1);
players(playersMap.get(callings(i))-1) = temp;
playersMap.put(callings(i), playersMap.get(callings(i))-1);
playersMap.put(temp, playersMap.get(temp)+1);
}
return players;
}
}
다른 사람의 솔루션
레벨과 플레이어를 위한 두 개의 맵 생성 및 사용
values()는 맵의 값을 하나씩 검색할 수 있습니다.
키만 가져오기는 keySet()
import java.util.*;
class Solution {
public String() solution(String() players, String() callings) {
Map<Integer, String> rank = new HashMap<>();
Map<String, Integer> player = new HashMap<>();
for (int i = 0; i < players.length; i++) {
rank.put(i + 1, players(i)); // 순위 , 이름 hashmap
player.put(players(i), i + 1); // 이름, 순위 hashmap
}
for (String curPlayer : callings) {
int curRank = player.get(curPlayer); // 현재 플레이어의 순위
int frontRank = curRank - 1; // 앞 플레이어의 순위
String frontPlayer = rank.get(frontRank); //앞 플레이어 이름
rank.put(frontRank, curPlayer); // 추월할 선수 이름 앞으로
rank.put(curRank, frontPlayer); // 추월 당한 선수 뒤로
player.put(frontPlayer, curRank); // 추월 당한 선수 순위 다운
player.put(curPlayer, frontRank); // 추월한 선수 순위 업
}
String() answer = new String(players.length);
int cnt = 0;
for(String s : rank.values()){
answer(cnt++) = s;
}
return answer;
}
}