https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
달리기 경주라는 문제 Java로 문제 풀이하겠습니다.


이 문제는 해설자가 특정 선수를 불렀을 때 해당 선수가 앞으로 이동하여 추월하는 상황을 다루고 있습니다.
저는 다음과 같이 풀이하였습니다.
import java.util.Map;
import java.util.HashMap;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String, Integer> orderMap = new HashMap<>();
for(int i=0; i<players.length; i++) {
orderMap.put(players[i], i);
}
for(String calling: callings) {
int index = orderMap.get(calling);
if (index > 0) {
String temp = players[index - 1];
players[index - 1] = calling;
players[index] = temp;
orderMap.put(calling, index-1);
orderMap.put(temp, index);
}
}
return players;
}
}
저는 HashMap 자료 구조를 사용하여 문제를 풀이하였습니다.
HashMap은 key-value를 쌍으로 데이터를 저장하는 자료구조입니다.
특정 키를 사용하여 값을 찾는데 빠른 검색 속도를 제공하기 때문에 배열에서 선수의 순서를 찾을 때 유용할 것이라고 판단하였습니다.
- 먼저 선수들의 이름을 기반으로 순서를 저장합니다.
HashMap을 생성하여 key는 이름으로 value는 순서를 저장합니다. - 호출되는 요소에 대하여 for문을 돌면서 순차적으로 처리합니다.
orderMap에서 호출된 선수의 순서를 가지고 옵니다.
만약, 선수의 순서가 0보다 크다면(맨 앞이 아니라면) 다음을 수행합니다.
- 현재 선수의 이전 위치의 선수를 임시 변수 temp에 저장합니다.
- 현재 선수의 이전 위치에 호출된 선수의 이름을 넣습니다.
- 현재 선수의 위치에는 temp에 저장해 둔 이전 선수의 이름을 넣습니다.
- orderMap을 업데이트하여 각 선수의 새로운 위치를 반영합니다. - 마지막으로 변경된 players 배열을 반환합니다.
이 방법을 통해 각 호출에 따라 선수들의 순서를 변경할 수 있습니다.
다른 이견이 있으시다면 댓글에 자유롭게 남겨주세요.

'Algorithm > CodingTest' 카테고리의 다른 글
| [Programmers] Level.1 가장 가까운 같은 글자 (Java) (0) | 2023.10.27 |
|---|---|
| [Programmers] Level.1 콜라 문제 (Java) (0) | 2023.10.27 |
| [Programmers] Level.1 삼총사(Java) (0) | 2023.10.24 |
| [Programmers] Level.1 가운데 글자 가져오기(Java) (0) | 2023.10.22 |
| [Programmers] Level.1 최소 직사각형(Java) (0) | 2023.10.22 |