🌞Algorithm/🔥Baekjoon

[programmers] 달리기 경주

뿌야._. 2026. 6. 5. 12:01
문제
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