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

홍성진·2023년 4월 8일
0

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

달리기 경주 중인 선수들의 이름을 현재 등수 기준으로 정렬한 배열이 주어집니다. 또, 앞지르기가 발생할 때마다 앞지르기에 성공한 선수의 이름을 담은 배열이 주어집니다. 이 때 최종 등수 기준 배열을 반환하는 문제입니다.

먼저 dictionary에 선수별 현재 등수를 담아두고, 앞지를 때마다 조정해주었습니다. 이 때 앞지른 선수의 등수를 파악하기 위해 players array를 그대로 써도 되지만 편의를 위해 dictionary를 하나 더 만들어서 key, value를 바꿔 넣었습니다.

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];
        HashMap<String, Integer> map1 = new HashMap<>();
        HashMap<Integer, String> map2 = new HashMap<>();
        
        for (int i = 0; i < players.length; i++) {
            map1.put(players[i], i);
            map2.put(i, players[i]);
        }
        
        for (String calling : callings) {
            int newRank = map1.get(calling) - 1;
            String preOwner = map2.get(newRank);
            
            map1.put(calling, newRank);
            map1.put(preOwner, newRank + 1);
            
            map2.put(newRank, calling);
            map2.put(newRank + 1, preOwner);
        }
        
        for (int i = 0; i < players.length; i++) {
            answer[i] = map2.get(i);
        }
        
        return answer;
    }
}

0개의 댓글