문제/프로그래머스

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

icodesiuuuu 2024. 11. 24. 17:02

문제

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


 

문제 개요

얀의 달리기 경주에서 선수들이 추월하는 상황을 바탕으로 경주 종료 후 최종 순위를 구하는 문제입니다. 선수들이 초기 순위대로 주어지고, 해설진이 특정 선수를 호출하면 해당 선수가 바로 앞의 선수를 추월합니다. 이를 반복한 뒤, 최종적으로 모든 선수의 순위를 반환해야 합니다.

접근 방법

HashMap을 활용하여 간단하게 해결할 수 있는 문제입니다.

코드

import java.util.*;
class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];
        Map<String, Integer> man = new HashMap<>();
        Map<Integer, String> rank = new HashMap<>();
        
        int cnt = 1;
        for(int i=0; i<players.length; i++) {
            man.put(players[i], cnt);
            rank.put(cnt, players[i]);
            cnt++;
        }
        
        for(int i=0; i<callings.length; i++) {
            String cur = callings[i];
            int curRank = man.get(cur);
            
            String target = rank.get(curRank-1);
            int targetRank = curRank-1;
            
            man.put(cur, targetRank);
            man.put(target, curRank);
            rank.put(targetRank, cur);
            rank.put(curRank, target);
        }
        
        for(int i=1; i<=cnt-1; i++) {
            answer[i-1] = rank.get(i);
        }
        return answer;
    }
}