문제는 프로그래머스에 가서 읽어보자.
https://school.programmers.co.kr/learn/courses/30/lessons/178871
정답여부: 정답
시간: 20분
Map을 이용하는 전형적인 대표문제 중 하나. 하지만, 생각보다 코테로 나오면 생각의 늪에 빠질 확률이 큰 문제이다. 기준을 하나로 확실하게 잡아놓고 , 천천히 쭉 풀어나가는게 중요함.
지금 위 문제가 껄끄러운 이유가, 입력값으로 이름
을 받기 때문임. 이름을 통해서 등수를 알아내기 위해서는 탐색을 하던가, 이름을 key로 등수를 value로 저장된 Map이 필요함.
이진 탐색한답시고 이상한 코드를 짜버렷다.
import java.util.Arrays;
class Solution {
public String[] solution(String[] players, String[] callings) {
String[] answer = {};
//binary Search
for(int i=0;i<callings.length;i++){
binary_search(players,callings,i);
}
answer = Arrays.copyOf(players,players.length);
return answer;
}
public void binary_search(String[] players,String[] callings,int idx){
int start = 0;
int end = players.length-1;
while(start<end){
int mid = (start + end)/2;
if(players[mid] == callings[idx]){
//swap
swap(players,mid,mid-1);
System.out.println("players"+players[mid],)
return;
}
start = mid;
}
}
public <T> void swap(T[] a,int f,int s){
T temp;
temp = a[f];
a[f] = a[s];
a[s] = temp;
}
}
import java.util.HashMap;
class Solution {
public String[] solution(String[] players, String[] callings) {
String[] answer = {};
HashMap<String,Integer> nameKeyRanking = new HashMap<>();
for(int i=0;i<players.length;i++){
nameKeyRanking.put(players[i],i);
}
for(String calling : callings){
//기존의 등수
int curRank = nameKeyRanking.get(calling);
int newRank = curRank-1;
//Map Update
nameKeyRanking.put(calling,newRank);
nameKeyRanking.put(players[newRank],curRank);
//swap
players[curRank] = players[newRank];
players[newRank] = calling;
}
return players;
}
}