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

fsm12·2023년 7월 15일
0

프로그래머스

목록 보기
37/57
post-thumbnail

문제링크

문제 이해

[ 입력형태 / 조건 ]

players
선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 | ["mumu", "soe", "poe", "kai", "mine"] | 5 ≤ players의 길이 ≤ 50,000, players[i]는 i번째 선수의 이름

callings
해설진이 부른 이름을 담은 문자열 배열 | ["kai", "kai", "mine", "mine"] | 2 ≤ callings의 길이 ≤ 1,000,000, callings는 players의 원소들로만 이루어짐

[ 문제 ]

경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return

[ 풀이 ]

Map에 순서와 함께 초기화를 한 뒤, callings에 불린 이름과 앞서 있던 이름의 순서를 바꿈



코드

> [성공] 1차 시도 : Map 이용

  • 생각한 풀이 그대로 구현
import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        Map<String, Integer> map = new HashMap<>();
        int order = 0;
        for(String player : players){
            map.put(player, order++);
        }
        
        for(String call : callings){
            int idx = map.get(call);
            String pre = players[idx-1];
            players[idx-1] = call;
            map.put(call, idx-1);
            players[idx] = pre;
            map.put(pre, idx);
        }
        return players;
    }
}



0개의 댓글