푼 날짜 : 2024.04.30
푼 문제 : [연습문제] / 달리기 경주
사용한 언어 : javascript
파라미터 설명 :
players | 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 |
callings | 해설진이 부른 이름을 담은 문자열 배열 |
전체 코드 :
function solution(players, callings) {
const myMap = new Map();
players.forEach((item, idx) => {
myMap.set(item, idx);
})
callings.forEach((item, idx2) => {
let idx = myMap.get(item);
let temp = players[idx -1];
players[idx-1] = players[idx];
players[idx] = temp;
myMap.set(item, idx-1);
myMap.set(temp, idx);
})
return players;
}
코드 설명 :
players배열의 순서를 바꿔주어야 한다.
그렇기 위해서는 index정보가 필요한데, 처음에 indexOf를 사용하여 풀었더니 시간 초과가 났다.
Map 을 활용하면 key, value 형식으로 활용할 수 있어서 map을 사용했다.
map을 선언하여 우선 players에 담긴 player마다의 index정보를 저장했다.
function solution(players, callings) {
const myMap = new Map();
players.forEach((item, idx) => {
myMap.set(item, idx);
})
callings를 반복하며 해당하는 item의 index정보를 map에서 가져온다.
그리고 players의 앞 요소와 순서를 바꿔준다.
callings.forEach((item) => {
let idx = myMap.get(item);
let temp = players[idx -1];
players[idx-1] = players[idx];
players[idx] = temp;
여기서 꼭 체크해줘야 할 점! ⭐️
map에서 key의 value를 올바르게 배열 순서 변경 후 index로 set 해줘야 한다.
myMap.set(item, idx-1);
myMap.set(temp, idx);
})
return players;
}
위의 과정이 반복된 후 최종적으로 players를 리턴한다.
시간초과 난 처음 코드 :
function solution(players, callings) {
callings.forEach((item) => {
let idx = players.indexOf(item);
let temp = players[idx-1];
players[idx-1] = players[idx];
players[idx] = temp;
})
return players;
}
시간 초과 꼭 기억하자~
'Programming > Algorithm' 카테고리의 다른 글
[백준14940] / 쉬운 최단거리 - 그래프(BFS) (1) | 2024.07.25 |
---|---|
[백준11727] / 2×n 타일링 2 - DP (0) | 2024.07.24 |
[백준11726] / 2×n 타일링 - DP (0) | 2024.07.24 |
[프로그래머스] [연습문제] / 추억 점수 (0) | 2024.04.30 |
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (1) | 2024.01.30 |