티스토리 뷰
728x90
선수들의 이름이 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
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 완주하지 못한 선수 (1) | 2024.11.17 |
---|---|
[프로그래머스] Lv.1 과일 장수 (1) | 2024.11.16 |
[프로그래머스] Lv.1 로또의 최고 순위와 최저 순위 (3) | 2024.11.15 |
[프로그래머스] Lv.1 실패율 (2019 KAKAO BLIND RECRUITMENT) (2) | 2024.11.13 |
[프로그래머스] Lv.1 추억 점수 (0) | 2024.11.12 |