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
- 프로그래머스코테
- mysql
- 알고리즘스터디
- 프로그래머스알고리즘
- next.js 에러
- 코딩
- 코테스터디
- Redux-Toolkit
- 프로그래밍
- 코딩테스트
- next.js
- 자바스크립트
- 프로그래머스 코테
- 코테준비
- 알고리즘공부
- 프로그래머스코딩테스트
- 프로그래머스 알고리즘
- 1일1코테
- 알고리즘문제
- 정처기기출
- 프로그래머스
- 프로그래머스 Lv.0
- js
- CSS
- 코테공부
- html
- 프로그래머스 코딩테스트
- 개발자
- 프로그래머스 레벨0
- 정보처리기사
Archives
- Today
- Total
계발하는 개발자
[프로그래머스/Lv.1] 달리기 경주 본문
⚙️ 문제 설명
⚠️ 제한 사항
🔃 입출력
📜 입출력 예 설명
🧠 나의 풀이
// 1차 - 코드 통과했지만, 시간 초과로 제출시에는 실패
function solution(players, callings) {
for(let i=0; i<callings.length; i++) {
// 호출된 선수의 인덱스 찾기
const callIndex = players.indexOf(callings[i]);
// 1등 선수가 아닌 경우
if (callIndex > 0) {
const temp = players[callIndex]; // kai
players[callIndex] = players[callIndex - 1]; // poe
players[callIndex - 1] = temp; // poe가 kai 자리로 이동
}
}
return players;
}
// 2차
function solution(players, callings) {
const playerObj = {};
// 중복된 선수 이름을 처리하고 인덱스를 저장
players.forEach((player, index) => {
playerObj[player] = index;
});
callings.forEach(calling => {
const callIndex = playerObj[calling];
// 1등 선수가 아닌 경우
if (callIndex > 0) {
const temp = players[callIndex]; // kai
players[callIndex] = players[callIndex - 1]; // poe
players[callIndex - 1] = temp; // poe가 kai 자리로 이동
// 존재하지 않는 선수 이름 처리
playerObj[calling] = callIndex - 1; // 선수 위치 업데이트
playerObj[players[callIndex]] = callIndex; // 이전 위치 업데이트
}
});
return players;
}
🧐 풀이 설명
2차 식의 경우 1차 식과 다른 점은 players 배열 각 요소를 객체의 key로, 값을 index 로 저장하는 방식이다.
그런 후 callings 배열의 각 값과 일치하는 경우의 값을 callIndex에 저장하고,
players[callIndex] 값이 선언됐을 때가 앞 선수를 추월했을 때이므로, 배열 인덱스값을 조정해서 앞뒤 요소끼리 자리를 바뀌게 했다.
그리고 객체에 저장된 값이 players 배열을 참조했기 때문에, calling 값에 undefined가 들어가게 되는데
마찬가지로 호출된 선수와 이전 위치 선수의 인덱스를 서로 바꿔줘야 올바른 값을 참조할 수 있다.
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/178871
LIST
'🖥 Computer Science > Algorithm' 카테고리의 다른 글
[프로그래머스/Lv.1] 추억 점수 (1) | 2023.11.25 |
---|---|
[프로그래머스/Lv.0] 영어가 싫어요 (2) | 2023.11.21 |
[프로그래머스/Lv.0] 대문자와 소문자 (0) | 2023.11.21 |
[프로그래머스/Lv.0] 숨어있는 숫자의 덧셈(1) (0) | 2023.11.21 |
[프로그래머스/Lv.0] 문자 반복 출력하기 (1) | 2023.11.21 |
dev_genie
@dev_genie
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!