💡 문제
💬 입출력 예시
📌 풀이(소스코드)
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < players.length; i++) {
map.put(players[i], i);
}
for (String calling : callings) {
int score = map.get(calling);
String previousCalling = players[score-1];
players[score-1] = calling;
map.put(calling, score-1);
players[score] = previousCalling;
map.put(previousCalling, score);
}
return players;
}
}
📄 해설
접근
- 완전 탐색을 수행하면 시간 초과가 난다.
HashMap
을 사용하면 시간 초과가 나지 않으므로, 이를 통해 해결한다.
과정
- 변동되는 선수들의 순위는
String
을 키로 갖고 Integer
를 값으로 갖는 HashMap
에 저장된다.
players
배열은 현재 달리고 있는 선수들을 순서대로 가지고 있으므로, 해당 배열 내의 문자열들을 반복문을 통해 map
에 추가한다.
callings
배열을 순회하면서 불린 선수의 앞 선수와 위치를 변경해준다.