- 프로래머스 Lv1 달리기 경주 문제
- 해당 문제의 난이도 상승 원인
- 순위 변경은 동적인데 현재 순위는 정적이라서 처리가 불가
- 해당 문제를 해결한 방법
- 들어온 선수 배열을 복사 후 현재 순위를 관리하기 위해 사용
- map 를 사용하여 선수의 순위가 변경될 시 그 값을 저장
- 처음 방식에서 변경한 방식
- 처음
- 호출마다 배열에서 선수 위치를 탐색하였으나 실행에 오래걸리는 경우가 발생해 오류로 판별됨
- 변경
- Map을 활용하여 위치를 즉시 조회해 시간을 줄임
- 들어온 초기 배열을 복사하여 그 배열로 동적 처리 적용
- 문제의 핵심
- 이 문제의 목적
import java.util.*;
class RunningRace {
public String[] solution(String[] players, String[] callings) {
String[] tPlayers = players.clone();
Map<String, Integer> rank = new HashMap<>();
for(int i = 0; i < tPlayers.length; i++){
rank.put(tPlayers[i], i);
}
for(String c : callings){
int curr = rank.get(c);
int prev = curr - 1;
rank.put(c, prev);
rank.put(tPlayers[prev], curr);
tPlayers[curr] = tPlayers[curr - 1];
tPlayers[prev] = c;
}
return tPlayers;
}
public static void main(String[] args) {
String[] players = {"mumu", "soe", "poe", "kai", "mine"};
String[] callings = {"kai", "kai", "mine", "mine"};
RunningRace r = new RunningRace();
System.out.println("결과 : " + Arrays.toString(r.solution(players, callings)));
}
}