Programmers

[Programmers : Java] - 달리기 경주

u_SZero 2023. 11. 2. 15:40

문제 설명

 

 


1차 시도

 

 

문제에 대해 직관적으로 접근하다 보니 이중 포문을 쓰게 되었다.

시간 복잡도가 마음에 걸렸는데 역시나 9번부터 시간 초과로 실패.

 


2차 시도

 

 

Arrays.asList(배열).indexOf("찾고자하는문자열");

을 사용하여 이중 포문에서 하나의 포문으로 줄어보았지만

그래도 9번부터 시간 초과 오류로 실패

 

 


 3차 시도

 

이 이후로는 도저히 머리속에서 떠오르는 방법이 없었기에 구글링 시작...

블로그에서 HashMap을 사용하는 것에서 힌트를 얻었고 그 방식으로 3차 시도!

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];
        
        // HashMap 선언
        HashMap<Integer, String> mapRank= new HashMap<>();
        HashMap<String, Integer> mapPlayer = new HashMap<>();
        // HashMap 초기화
        for(int i=0; i<players.length; i++)
        {
            mapRank.put(i, players[i]);
            mapPlayer.put(players[i], i);
        }
        
        for(int j=0; j<callings.length; j++)
        {
            // 추월한 사람의 등수
            int currentRank = mapPlayer.get(callings[j]);
            // 추월한 사람의 이름
            String tempPerson = mapRank.get(currentRank);
            
            // 추월 당한 사람의 이름
            String frontPerson = mapRank.get(currentRank - 1);
            
            // 순위 변경
            mapRank.put(currentRank-1, tempPerson);
            mapRank.put(currentRank, frontPerson);
            
            mapPlayer.put(tempPerson, currentRank-1);
            mapPlayer.put(frontPerson, currentRank);
        }
        
        for(int k=0; k<answer.length; k++)
        {
            answer[k] = mapRank.get(k);
        }
        
        return answer;
    }
}

 

나는 HashMap을 두번 선언하여 사용하였지만

제출 후 다른 분들이 푼 방식을 보니 HashMap을 하나만 사용하는 것이 효율적일 것 같다.

HashMap  하나만 사용해서 다시 풀어봐야겠당

'Programmers' 카테고리의 다른 글

[Programmers : Java] - 공원산책  (4) 2023.11.21
[Programmers : Java] - 덧칠하기  (0) 2023.11.05
[Programmers : Java] - 추억 점수  (0) 2023.11.05