출처 : https://school.programmers.co.kr/learn/courses/30/lessons/178871
import java.util.Arrays;
class Solution {
public String[] solution(String[] players, String[] callings) {
for(int i=0;i<callings.length;i++){
for(int j=0;j<players.length;j++){
if(callings[i].equals(players[j])){
String pre=players[j-1];
players[j-1]=players[j];
players[j]=pre;
break;
}
}
}
return players;
}
}
단순히 이중 for문이므로 호출된 선수가 꼴지라면 배열 끝까지 돌아야하므로 비효율적이고 시간초과가 났습니다.
map의 키값을 활용하여 찾아낸다면 훨씬 효율적일 것 입니다.
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String,Integer> playersMap=new HashMap<>();
//선수와 등수 map에 put
for(int i=0;i<players.length;i++){
playersMap.put(players[i],i);
}
for(String call : callings){
//호출된 선수의 등수
int callingPlayer=playersMap.get(call);
//앞에 있는 선수
String pre=players[callingPlayer-1];
players[callingPlayer-1]=players[callingPlayer];
players[callingPlayer]=pre;
playersMap.put(call,callingPlayer-1);
playersMap.put(pre,callingPlayer);
}
return players;
}
}
결과는 성공
'알고리즘 > Lv1. 프로그래머스' 카테고리의 다른 글
두 개 뽑아서 더하기 (0) | 2023.07.11 |
---|---|
k번째수 (0) | 2023.07.11 |
숫자 문자열과 영단어 (0) | 2023.07.11 |
1차 비밀지도 (0) | 2023.07.07 |
추억 점수 (0) | 2023.07.04 |