📑 1. 문제설명


💡 2. 풀이과정
HashMap + 배열 조합으로 해결하는 문제이다.
해시맵 써야 하는 이유는 선수의 현재 등수(인덱스)를 빠르게 조회해야 하기 때문이다.
<String, Integer> 타입의 HashMap을 선언해서 key, value 값으로 각각 선수명, 인덱스를 넣는다.
그 후 callings 배열을 순회하며 해시맵에서 해당 이름에 대응하는 인덱스를 찾아 players 배열에서 선수 이름을 바꾼다.
👨💻 3. 정답코드
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
HashMap<String, Integer> playersList = new HashMap<>();
// 1. players 배열의 선수 이름과 인덱스를 playersList에 저장
for (int i = 0; i < players.length; i++) {
playersList.put(players[i], i);
}
for (int i = 0; i < callings.length; i++) {
// 2. 호출된 선수 인덱스
int currentIdx = playersList.get(callings[i]);
// 3. 바로 앞 선수 인덱스
int frontIdx = currentIdx - 1;
// 4. 앞 선수 이름
String frontPlayer = players[frontIdx];
// 5. 두 선수 위치바꾸기
players[frontIdx] = callings[i];
players[currentIdx] = frontPlayer;
// 6. 인덱스 정보도 업데이트 - put(key, newValue)
playersList.put(callings[i], frontIdx);
playersList.put(frontPlayer, currentIdx);
}
return players;
}
}
- 선수 이름과 현재 인덱스를 저장하는 HashMap 생성
- 호출된 선수 이름으로 현재 위치 찾기
- 바로 앞 선수와 위치 바꾸기
- HashMap에 인덱스도 업데이트 하기
- 모든 호출에 대해 반복하기
🐦 4. 어려웠던 점
1. 키에 밸류값 덮어쓸때도 HashMap의 put(key, value) 쓴다.
- 해당 키가 없으면 새로 추가하고,
- 이미 있으면 기존 값을 새로운 값으로 덮어쓰는 메서드이다.
2. 추월 시 선수 위치 바꾸고, HashMap도 반드시 업데이트 해야 한다.
- 처음에는 이 부분 처리를 하지 않아서 원하는 값이 나오지 않았다.
- 선수 추월로 순서가 바뀌면, 그 선수들의 인덱스 값도 바뀌기 때문이다.
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
| [프로그래머스] (Java) [PCCE 기출문제] 9번 / 이웃한 칸 문제풀이 (5) | 2025.08.18 |
|---|---|
| [프로그래머스] (Java) [PCCE 기출문제] 10번 / 공원 문제풀이 (3) | 2025.08.18 |
| [프로그래머스] (Java) 택배상자 꺼내기 (7) | 2025.08.06 |
| [프로그래머스] (Java) 표편집 (이중연결리스트) (11) | 2025.08.06 |
| [프로그래머스] (Java) 방문 길이 (9) | 2025.08.04 |