Argorithm
[Programmers]LV.1 달리기 경주
빙응이
2023. 11. 28. 20:14
📝풀이
해당 문제는 일반 배열로 비교하면 안된다.
그 이유는
Players 최대가 50,000 Callings의 최대가 1,000,000이므로
최대 50,000 x 1,000,000번이 돌아간다.
이런 반복횟수가 나올 수 있는 배열을 사용하면 당연히 시간 초과가 나오게 된다.
그렇기에 빠른 검색이 가능한 자료 구조를 사용해야한다.
일반적으로 빠른 검색은 "HashMap"을 사용하면 된다.
import java.util.HashMap;
class Solution {
public String[] solution(String[] players, String[] callings) {
HashMap<String, Integer> map = new HashMap<>(); //[A] 해시맵 선언
for(int i =0; i < players.length;i++) //[B] 해시맵 초기화
map.put(players[i],i);
for(String call:callings){
int rank = map.get(call); //[C] 찾는 선수의 순위를 가져온다.
String tmp = call; //[D] player배열 기준 찾은 선수가 앞 선수를 추월
players[rank] = players[rank-1];
players[rank-1]= tmp;
map.put(call, rank-1); //[E] 해시맵도 추월한 것을 갱신한다.
map.put(players[rank], rank);
}
return players;
}
}