class Solution {
public String[] solution(String[] players, String[] callings) {
String[] answer = {};
int idx=0;
int cnt=0;
String tmp="";
while(idx<callings.length){
String str = callings[idx];
while(cnt<players.length){
if(players[cnt].equals(str)){
tmp = players[cnt];
players[cnt] = players[cnt-1];
players[cnt-1] = tmp;
}
cnt++;
}
cnt=0;
idx++;
}
return players;
}
}
배열의 연산은 시간이 오래걸린다는 것을 알았다. 최대한 for문 안쓰고 while문으로 해봤는데도 그냥 똑같다. 그래서 순서를 유지 해주는 HashMap에 정보를 저장해뒀다가 필요한 정보를 get해서 players[]에 저장해주면 된다. 그러면 딱히 연산이 필요없다.
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String, Integer> map = new HashMap<>();
for(int i=0; i<players.length; i++){
map.put(players[i],i);
}
for(String player : callings){
int rank = map.get(player); // 등수
String beforePlayer = players[rank-1]; // 앞 등수
players[rank-1] = player;
players[rank] = beforePlayer;
map.put(player,rank-1);
map.put(beforePlayer,rank);
}
return players;
}
}
map을 만들어준다. HashMap이라서 저장 순서를 기억한다. <이름,등수> 이렇게 저장해준다.
for each문으로 callings를 훑어 본다. player 를 불린 사람이라고 하자.
해당 player의 등수를 map에서 등수를 꺼내온다. 그리고 현재 players[]에서 player의 앞 등수인 사람을 beforePlayer 로 저장. 이렇게 했으면 이제 players[]에 앞등수를 player로 , 뒷 등수를 beforePlayer로 바꿔준다. 그리고 map도 똑같이 갱신해준다.