프로그래머스 코딩 테스트 문제/lv1

프로래머스 Lv1 달리기 경주 문제

lys4321 2026. 2. 24. 13:18
  • 프로래머스 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)));
    }
}