티스토리 뷰

728x90

programmers_logo

 

 

선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players
해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어진다.
해설진이 이름을 부를 때마다 해당 플레이어가 추월한 것이고, 등수가 변경되야 한다.
경주가 끝나고 바뀐 등수에 따라 순서대로 선수의 이름이 담긴 배열을 return 하면 된다.

 

 

1. 현재 플레이어 배열의 데이터를 복사할 Map 변수 생성

 Map<String,Integer> playersMap = new HashMap<String,Integer>();

 

2. Map에 [key : 선수 이름, value : 현재 등수] 형식으로 담기

for(int i=0; i<players.length; i++){
	playersMap.put(players[i], i);
 }

 

3. 해설진이 부른 이름을 순서대로 꺼내어 Map에서 찾은 후, 현재 등수 번호를 idx 변수에 담기

for(int i=0; i<callings.length; i++){            
    int idx = playersMap.get(callings[i]);
	...
728x90

4. 기존 player 배열에서 등수-1 하여 바로 앞 등수 플레이어 찾은 후 prePlayer 변수에 담기

이후 현재 불러진 플레이어와 그 앞 등수의 플레이어의 인덱스를 변경하여 바뀐 등수 적용

	...
	String prePlayer = players[idx-1];
	players[idx-1] = callings[i];
	players[idx] = prePlayer;
	...

 

5. Map에서도 바뀐 등수 적용해주기

해설진의 이름 호출 끝날 때까지 반복하고 players 배열 return

	...
    	playersMap.put(callings[i], idx-1);
    	playersMap.put(prePlayer, idx);
}

return players;
320x100

전체 코드

import java.util.Map;
import java.util.HashMap;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        
        Map<String,Integer> playersMap = new HashMap<String,Integer>();
        for(int i=0; i<players.length; i++){
            playersMap.put(players[i], i);
        }
        for(int i=0; i<callings.length; i++){            
            int idx = playersMap.get(callings[i]);
            String prePlayer = players[idx-1];
            players[idx-1] = callings[i];
            players[idx] = prePlayer;
            playersMap.put(callings[i], idx-1);
            playersMap.put(prePlayer, idx);
        }
        
        return players;
    }
}

 



더 좋은 코드가 떠오르시면 댓글에 남겨주세요 !

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크