PS/Programmers

[level1, HashMap] 달리기 경주

git-sun 2023. 5. 10. 22:43

1. 문제

 

 

 

 

 

 

 

2. 문제 해결 논리

1. 문제 이해

  • 데이터 구조 결정
    • HashMap 이용
      • 선수(players 배열의 원소)와 등수(players 배열 각 원소의 인덱스) 저장

2. 알고리즘 설계

  • HashMap을 players 배열로 초기화
  • callings 배열 순회
    • HashMap에서 player의 등수 추출
    • 버블 정렬을 이용하여 players 배열 갱신
    • HashMap 등수 갱신

 

 

 

 

 

3. 코드 구현

import java.util.*;
class Solution {
    public String[] solution(String[] players, String[] callings) {
    	//1. HashMap으로 초기화
        HashMap<String, Integer> rankMap = new HashMap<>();
        for (int i = 0; i < players.length; i++) {
            rankMap.put(players[i], i);
        }
		
        //2. callings 배열 순회
        for (String player : callings) {
            //2-1. HashMap에서 player의 등수 추출
            int ownRank = rankMap.get(player);
			
            //2-2. 버블정렬 적용하여 players 배열 갱신
            String beforePlayer = players[ownRank - 1];
            players[ownRank-1] = player;
            players[ownRank] = beforePlayer;
			
            //2-3. HashMap에 등수 갱신
            rankMap.put(player, ownRank - 1);
            rankMap.put(beforePlayer, ownRank);
        }

        return players;
    }
}
반응형