본문 바로가기

프로그래머스(Java)/Level 1

[프로그래머스] 달리기 경주

728x90

코드 힌트

  1. HashMap 활용:
    • 2중 for문을 사용하면 시간 초과가 됩니다. 빠르게 탐색을 할 수 있는 방법으로 hashMap을 사용합니다. 
    • HashMap<String, Integer> map을 사용하여 각 플레이어의 이름과 초기 순위를 저장합니다.
    • 호출된 플레이어의 이름을 키로 하여 순위를 빠르게 조회할 수 있습니다.
  2. 플레이어 순위 변경:
    • players 배열의 순서를 변경합니다.
    • 호출된 플레이어와 그 앞의 플레이어의 위치를 교환하고, 이에 따라 map에서 각 플레이어의 순위도 업데이트합니다.
  3. 반복문을 통한 처리:
    • callings 배열을 순회하면서 각 호출된 플레이어의 순위를 변경합니다.
    • 호출된 플레이어의 이름을 키로 하여 map에서 해당 플레이어의 현재 순위를 조회하고, 이를 기반으로 위치 변경을 수행합니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    static HashMap<String,Integer> map = new HashMap<>();

    public String[] solution(String[] players, String[] callings) {
        // 각 플레이어의 초기 순위를 저장할 HashMap 초기화
        for (int i = 0; i < players.length; i++) {
            map.put(players[i], i);
        }

        // callings 배열을 순회하며 호출된 플레이어의 순위를 변경
        for (String calling : callings) {
            // 호출된 플레이어의 현재 순위를 map에서 가져옴
            int idx = map.get(calling);
            // 플레이어 위치 교환 메소드 호출
            playerSwap(players, idx);
        }

        // 최종적으로 변경된 players 배열 반환
        return players;
    }
    
    // 플레이어의 순위를 교환하는 메소드
    static void playerSwap(String[] players, int idx) {
        // 호출된 플레이어와 그 앞 플레이어의 위치를 변경
        String tmp = players[idx - 1];
        players[idx - 1] = players[idx];
        players[idx] = tmp;

        // map에서 각 플레이어의 순위를 업데이트
        map.put(players[idx], idx);
        map.put(players[idx - 1], idx - 1);
    }
}
728x90