(프로그래머/레이싱/JAVA)

https://school.programmers.co.kr/learn/courses/30/lessons/178871

프로그램 제작자

코드 중심 개발자를 고용하십시오. 스택 기반 위치 일치. 프로그래머를 위한 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.

프로그래머.co.kr

문제 접근

for 문만 사용하면 시간 초과가 발생합니다.

그래서 맵을 사용할까 생각했는데, 맵을 사용할 때 콜드 플레이어의 순위를 올릴 수는 있는데 추월당한 플레이어의 순위를 낮추는 방법이 생각이 안나네요.

나는 고개를 돌려 마침내 돌아서서 찾았다.

맵에서 플레이어의 순위를 플레이어 배열에 대한 인덱스로 사용합니다.

추월당한 선수이름 온도에 저장, 후 추격자바꾸다 호출된 플레이어이름을 넣어 플레이어의 위치 지정아니요

온도(추월당한 선수의 이름)넣어

위치가 변경되었습니다.

import java.util.*;

class Solution {
   public String() solution(String() players, String() callings) {
		
		 Map<String, Integer> playersMap = new HashMap<>();
		 for(int i=0; i<players.length; i++) playersMap.put(players(i), (i+1));
		 
		 for(int i=0; i<callings.length; i++) {
			 String temp = "";
			 temp = players(playersMap.get(callings(i))-2);
			 players(playersMap.get(callings(i))-2) = players(playersMap.get(callings(i))-1);
			 players(playersMap.get(callings(i))-1) = temp;
			 
			 playersMap.put(callings(i), playersMap.get(callings(i))-1);
			 playersMap.put(temp, playersMap.get(temp)+1);
			 
		}
		return players;
	}
}

다른 사람의 솔루션

레벨과 플레이어를 위한 두 개의 맵 생성 및 사용

values()는 맵의 값을 하나씩 검색할 수 있습니다.

키만 가져오기는 keySet()

import java.util.*;

class Solution {
    public String() solution(String() players, String() callings) {
        Map<Integer, String> rank = new HashMap<>();
        Map<String, Integer> player = new HashMap<>();

        for (int i = 0; i < players.length; i++) {
            rank.put(i + 1, players(i)); // 순위 , 이름 hashmap
            player.put(players(i), i + 1); // 이름, 순위 hashmap
        }

        for (String curPlayer : callings) {
            int curRank = player.get(curPlayer); // 현재 플레이어의 순위
            int frontRank = curRank - 1;         // 앞 플레이어의 순위
            String frontPlayer = rank.get(frontRank); //앞 플레이어 이름

            rank.put(frontRank, curPlayer); // 추월할 선수 이름 앞으로
            rank.put(curRank, frontPlayer); // 추월 당한 선수 뒤로
            player.put(frontPlayer, curRank); // 추월 당한 선수 순위 다운
            player.put(curPlayer, frontRank); // 추월한 선수 순위 업
        }

        String() answer = new String(players.length);
        int cnt = 0;
        for(String s : rank.values()){
            answer(cnt++) = s;
        }

        return answer;
    }
}