[프로그래머스] 달리기 경주 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/178871
입력 : 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players[], 해설진이 부른 이름을 담은 문자열 배열 callings[] (5 ≤ players.length ≤ 50,000, 2 ≤ callings.length ≤ 1,000,000)
출력 : 선수들의 이름을 1등부터 등수 순서대로 담은 배열
O(n)
HashMap
구현
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String, Integer> playerRanks = new HashMap<>();
// Initializing the map with player names and their initial positions
for (int i = 0; i < players.length; i++) {
playerRanks.put(players[i], i);
}
for (String call : callings) {
int currentPos = playerRanks.get(call);
if (currentPos > 0) {
String previousPlayer = players[currentPos - 1];
// Swapping the players in the list
players[currentPos - 1] = call;
players[currentPos] = previousPlayer;
// Updating their positions in the map
playerRanks.put(call, currentPos - 1);
playerRanks.put(previousPlayer, currentPos);
}
}
return players;
}
}