본문 바로가기
알고리즘/프로그래머스

(LEVEL 2)프로그래머스 - 달리기경주 (JAVA)

by 꾸준함 2023. 4. 13.

문제


입출력 예


문제설명 & 접근방법

1. 달리기 선수들(players) 이 등수에 따라 차례대로 주어지고 추월을 할때마다 추월한 선수의 이름이 불린다.

ex) A, B, C가 있을 때 (차례대로 1,2,3등)  B가불리면 B, A, C가 된다.

2. 선수이름별로 등수를 저장해두면 좋을거 같아서 HashMap으로 접근

 

 

풀이.

1. answer를 players의 길이만큼 초기화

2. 선수의 이름과 등수를 담을 HashMap을 선언

3. 등수 순서대로 주어지니 map에 등수를 담는다. (zero-indexed)

4. callings길이만큼 반복문을 돌며 

    4-1. 불린 선수의 이름을 통해 해당 등수를 저장해둔다.

    4-2. 가져온 등수로 players 배열에 접근하여 해당 등수의 선수를 가지고온다.

    4-3. 추월당한 선수와 swap을 해주고 HashMap에서 등수를 갱신해준다.

 


코드

import java.util.*;
class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];

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

            String t = players[temp]; // kai
            players[temp] = players[temp-1];
            players[temp-1] = t;

            map.put(t, map.get(t) - 1);
            map.put(players[temp],map.get(players[temp])+1);
        }

        return players;
    }
}