Contents
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
달리기 경주를 하는 중인데 선수가 앞선 선수를 추월할 때마다 심판이 추월한 선수의 이름을 불러준다
초기 위치의 선수 이름과 심판이 부른 선수 이름 배열이 매개변수로 주어지고,
최종 선수들의 위치를 배열로 반환하면 된다.
처음에는 추월해서 선수의 위치가 변경될 때마다 등수 조회를 했는데 이렇게 하면 너무 느려서 시간 초과가 나온다;;;
그래서 HashMap을 이용해서 선수명을 key, 등수를 value로 넣어놓고
선수의 이름이 나올 때마다 map에서 get을 이용해 등수를 가져온다.
이러면 등수 조회를 이중 for문을 사용하지 않아도 돼서 속도가 향상된다
가져온 등수를 이용해 앞선 선수와 배열에서 이름을 바꾸고 난 뒤에는
map도 위치를 바꿔 최신화해준다. 그래야 다음번에도 등수를 알 수 있으니까
// 프로그래머스 달리기 경주
// 선수를 추월할 때마다 이름을 부름
// 일반 배열로 등수 조회를 하면 너무 느림 죄다 for문 돌려야하니까
// map으로 해서 선수명(String), 등수(int) 이렇게 해놓고
// 등수 조회를 map으로 하고 바꾸는 거는 일반 배열을 변경
class Solution {
public String[] solution(String[] players, String[] callings) {
// 일반 배열을 map으로 전환
Map<String, Integer> pmap = new HashMap<>();
for (int i = 0; i < players.length; i++) {
pmap.put(players[i], i);
}
// 이름 불림
for (String c : callings) {
// map 이용해 부른 선수의 등수 조회
int tmprank = pmap.get(c);
// 부른 선수의 앞 등수의 선수명을 가져옴
String tmpname = players[tmprank - 1];
// 선수 교체
players[tmprank - 1] = players[tmprank];
players[tmprank] = tmpname;
// map 최신화
pmap.put(players[tmprank - 1], tmprank - 1);
pmap.put(players[tmprank], tmprank);
}
return players;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 덧칠하기 (JAVA) (2) | 2024.12.28 |
---|---|
[프로그래머스] 추억 점수 (JAVA) (0) | 2024.12.28 |
[프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기 (JAVA) (2) | 2024.12.23 |
[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기 (JAVA) (0) | 2024.12.22 |
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (JAVA) (4) | 2024.12.22 |