CODING TEST

프로그래머스 - 달리기 경주

우진하다 2023. 7. 28. 17:40

풀이 유형 - 해시 

해시맵으로 풀어야지 생각은 했는데
자꾸 틀려서 가만보니 원래 배열도 등수에 맞게 변경해줘야되는데
원본 players배열을 계속 불러와서 적용하니 틀리는게 당연 멍총멍총.. ㅋㅋ 

- 해시맵 <선수이름, 등수> 담기
- callings 배열을 돌면서 불린 선수를 키로 잡은 등수 가져오기
- 불린 선수는 -1, 원래 등수에 있던 선수는 불린 선수의 등수로 변경
- players도 swap해서 바뀐 등수로 배열 만들어주기
- 마지막에 answer 배열에 담아서 리턴하거나 players 배열 고대로 리턴;

import java.util.HashMap;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];
        HashMap<String, Integer> map = new HashMap<>();
        
        for (int i = 0; i < players.length; i++) {
            map.put(players[i], i + 1);
        }

        for (int i = 0; i < callings.length; i++) {
            int grade = map.get(callings[i]);
            map.put(callings[i], grade - 1);
            map.put(players[grade - 2], grade);
            
            String tmp = players[grade - 1];
            players[grade - 1] = players[grade - 2];
            players[grade - 2] = tmp;
        }
        
        for (int i = 0; i < players.length; i++) {
            answer[i] = players[i];
        }
        
        return answer;
    }
}