새소식

반응형
250x250
Programmers/Lv.1

프로그래머스 - 달리기 경주

  • -
728x90
반응형

 

이번 문제를 해결하기 위한 방법은 선수들의 현재 순위를 관리하는 것이다.

이를 위해 HashMap을 사용하여 각 선수의 이름과 현재 순위를 key-value 쌍으로 저장한다.

해설진이 선수 이름을 부를 때마다 해당 선수는 바로 앞 선수를 추월한 것으로 간주하여 순위를 업데이트한다.

 

1. 초기 순위 설정 : 선수들의 초기 순위를 HashMap에 저장한다. 이 때 선수들의 이름을 key로,

현재 등수를 value(index) 값으로 사용한다.

Map<String, Integer> runners = new HashMap<>();
for(int i = 0; i < players.length; i++) {
    runners.put(players[i], i);
}

 

2. 추월 상황 처리 : 해설진이 부른 이름을 기반으로 순위 변경 로직을 실행한다.

호출된 선수는 바로 앞의 선수와 순위가 바뀌며, 이는 배열과 HashMap에서 모두 업데이트된다.

for(int i = 0; i < callings.length; i++) {
    String call = callings[i];
    int now = runners.get(call);
    String prev = answer[now - 1];
    
    // HashMap에서 순위 업데이트
    runners.replace(call, now - 1);
    runners.replace(prev, now);
    
    // 배열에서 선수 위치 교환
    String temp = answer[now];
    answer[now] = answer[now - 1];
    answer[now - 1] = temp;
}

 

핵심 포인트로는

  • HashMap을 사용하여 선수들의 순위를 빠르게 조회하고 업데이트 하는 방법을 통해, 각 추월 상황을 효과적으로 관리하는 것이다.

전체 코드

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = players;
        Map<String, Integer> runners = new HashMap<>();
        for(int i = 0; i < players.length; i++) {
            runners.put(players[i], i);
        }
        
        for(int i = 0; i < callings.length; i++) {
            String call = callings[i];
            int now = runners.get(call);
            String prev = answer[now - 1];
            runners.replace(call, now - 1);
            runners.replace(prev, now);
            String temp = answer[now];
            answer[now] = answer[now - 1];
            answer[now - 1] = temp;
        }
        return answer;
    }
}
728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.