https://school.programmers.co.kr/learn/courses/30/lessons/178871
문제 접근
for문만 사용하면 시간초과가 뜨더라
그래서 map을 쓰면 되겠거니 했는데 map을 사용할 땐 호명되는 선수의 순위를 높일 순 있어도 추월당한 선수의 순위를 줄이는 방법이 생각이 안나더라
이 방법 저 방법 머리 돌리다 결국 빙빙 돌아서 찾게 되었다.
players 배열의 인덱스로 map에 있는 선수들의 순위를 사용하였다.
추월당할 선수의 이름은 temp에 저장, 이후 추월당한 선수의 자리에 호명 선수의 이름을 넣고 호명되었던 선수의 자리엔 temp(추월당한 선수 이름)를 넣어주는 식으로 위치를 바꿔주었다.
이후 map에도 순위 변화
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;
}
}
다른 사람 풀이
순위와 플레이어에 대한 map을 2개 만들어서 활용
values()는 map의 value들을 하나씩 꺼내올 수 있다. ↔ key만 가져오는 건 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;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 요격 시스템 / JAVA] (0) | 2023.05.27 |
---|---|
[프로그래머스 / 연속된 부분 수열의 합 / JAVA] (1) | 2023.04.13 |
[프로그래머스 / 추억 점수 / JAVA] (0) | 2023.03.31 |
[프로그래머스 / 공원 산책 / JAVA] (0) | 2023.03.27 |
[프로그래머스 / 덧칠하기 / JAVA] (0) | 2023.03.24 |
댓글