[Java] Lv.1 프로그래머스 달리기 경주

rse·2023년 8월 26일
0

알고리즘

목록 보기
31/44

풀이

최종적으로 순위가 변경된 배열을 리턴하면 되는 문제이다.

처음에는 for 문으로 다 돌면 되지않나? 생각했는데 만약 for 문으로 탐색을 진행 할 경우
50,000 * 1,000,000 = 50,000,000,000 이라는 어마무시한 시간복잡도가 나오므로 HashMap 으로 진행했다.

일단 Map 으로 진행을 하면 Key 값에 선수 이름을 넣고, value 값에 등수를 넣어주면 된다.

코드

import java.util.*;
class Solution {
    public String[] solution(String[] players, String[] callings) {
        HashMap<String, Integer> map = new HashMap<>();
        for (int i = 0; i < players.length; i++) {
            map.put(players[i], i + 1);
        }
        for (int i = 0; i < callings.length; i++) {
            int rank = map.get(callings[i]);
            String name = players[rank -2]; // 전 선수 이름

            map.put(name, rank);
            map.put(callings[i], rank -1);
            players[rank -1] = name;
            players[rank -2] = callings[i];
        }

        return players;
    }
}

처음으로 10점 받아봤다!! 짱 신기...

profile
기록을 합시다

0개의 댓글