문제
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
< 달리기 경주 >
문제 풀이 (Java)
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
String[] answer = new String[players.length];
HashMap<String, Integer> map = new HashMap<>();
HashMap<Integer, String> rank = new HashMap<>();
for (int i = 0; i < players.length; i++) {
map.put(players[i], i + 1);
rank.put(i + 1, players[i]);
}
for (int i = 0; i < callings.length; i++) {
String name1 = callings[i];
String name2 = rank.get(map.get(name1) - 1);
int num = map.get(name1);
map.put(name1, num - 1);
map.put(name2, num);
rank.put(num, name2);
rank.put(num - 1, name1);
}
for (int i = 0; i < players.length; i++) {
answer[i] = rank.get(i + 1);
}
return answer;
}
}
HashMap에 이름을 key로, 등수를 value로 저장하고, 또 다른 HashMap에는 반대로 저장한다. callings를 살펴보며 추월한 선수의 등수와 추월 당한 선수의 등수를 바꾼다. 최종 등수대로 answer에 저장한 후 answer을 반환한다.
* 다 풀고 생각해 보니 HashMap 하나로 풀 수 있는 문제였다.

출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
| [Baekjoon] 32813_Oooh I See (0) | 2026.04.24 |
|---|---|
| [Baekjoon] 6107_Plumbing the Pond (0) | 2026.04.23 |
| [Baekjoon] 6754_Bridge transport (0) | 2026.04.22 |
| [Baekjoon] 27137_Square Designs (0) | 2026.04.21 |
| [Baekjoon] 13382_Lab (0) | 2026.04.20 |