Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 구현
- 배열
- HashMap
- dfs
- HTTP
- 스프링부트
- 해결
- 문자열
- 구름LEVEL
- 명령어
- bfs
- Linux
- 코딩테스트
- 개발자
- 도커
- 주니어
- spring
- IntelliJ
- 스프링
- 프로그래머스
- 스타트업
- 해시맵
- 이직
- 인텔리제이
- Java
- docker
- 자료구조
- 백엔드
- spring boot
- 스프링 부트
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 달리기 경주 (Java) 본문
반응형
접근 방식
달리기를 하며 이름이 불리는 선수와 그 선수의 바로 앞에 있는 선수의 순위(위치)를 바꾸어주면 되는 문제이다. 범위를 벗어나는(1등 선수) calling 은 없으므로 별도의 순위변경에 대한 예외처리는 필요없었다. 다만 복잡도를 줄이기 위해 이중 반복문을 통한 탐색이 아닌 해시맵을 활용한 탐색 및 등수의 변경으로 로직을 만들어야했다. 인풋값이 각각 50,000과 100,000이였기 때문이다.
로직 설명
- 선수들의 순위를 이름으로 바로 접근할 수 있도록 map을 선언하여 이름과 순위를 key, value로 넣어준다.
- calling배열을 탐색하며:
1) 현재 불리는 선수의 순위(인덱스)를 가져온다(이 순위로 player 배열에서 현재 선수와, 앞 선수에 접근할 수 있다).
2) map에서 두 선수의 순위를 바꿔준다.
3) player 배열에서 두 선수의 위치를 바꿔준다.
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String, Integer> pMap = new HashMap<String, Integer>();
for(int i = 0; i < players.length; i++){
pMap.put(players[i], i);
}
for(String name : callings){
//change ranks
int idx = pMap.get(name);
pMap.put(players[idx], idx - 1);
pMap.put(players[idx - 1], pMap.get(players[idx - 1]) + 1);
//swap players
String temp = players[idx];
players[idx] = players[idx - 1];
players[idx - 1] = temp;
}
return players;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 튜플 (Java) (0) | 2023.04.19 |
---|---|
[프로그래머스] 숫자 변환하기 (Java) (0) | 2023.04.13 |
[프로그래머스] 게임 맵 최단거리 (Java) (2) | 2023.04.04 |
[프로그래머스] 피로도 (Java) (0) | 2023.04.01 |
[프로그래머스] 두 큐 합 같게 만들기 (Java) (0) | 2023.03.20 |
Comments