티스토리 뷰

정답 코드

import java.util.*;

class Solution {
     public String[] solution(String[] players, String[] callings) {
         Map<Integer, String> numberMap = new HashMap<>(); // key가 순서, value가 이름
         Map<String, Integer> nameMap = new HashMap<>(); // key가 이름, value가 순서
         for(int i = 0; i < players.length; i++) { // map 초기화
             numberMap.put(i, players[i]);
             nameMap.put(players[i], i);
         }
         for(String calling : callings) { // 이름이 나오면 앞에 번호와 순서를 바꾼다.
             Integer i = nameMap.get(calling);
             numberMap.put(i, numberMap.get(i - 1));
             nameMap.put(numberMap.get(i), i);
             numberMap.put(i - 1, calling);
             nameMap.put(calling, i - 1);
         }
         String[] answer = new String[players.length];
         for(int i = 0; i < players.length; i++) {
             answer[i] = numberMap.get(i);
         }
         return answer;
     }
 }

처음 풀 때는 이중 for문으로 앞뒤 순서를 바꿨는데 O(N^2) 걸려서 시간 초과가 나왔다.
이를 해결하기 위해 map을 사용하여 시간을 줄였다.

달리기 경주 문제 링크

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함