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
- Lv. 3
- Lv. 0
- 티스토리챌린지
- SQL
- level 3
- LEVEL 2
- bfs
- DP
- 프로그래머스
- group by
- Java
- Lv. 1
- Python
- dfs
- 오블완
- Dynamic Programming
- 동적계획법
- join
- 깊이 우선 탐색
- 소프티어
- 너비 우선 탐색
- Lv. 2
- 파이썬
- 자바스크립트
- select
- SQL 고득점 KIT
- javascript
- programmers
- softeer
- C언어
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 4] 호텔 방 배정 {언어 : JavaScript} [다시 풀어 보기] 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/64063
정답 코드
function solution(k, room_number) {
const answer = [];
let visited = new Map();
for (const rn of room_number) {
if (!visited.has(rn)) {
visited.set(rn, rn + 1);
answer.push(rn);
continue;
};
let tmp = rn;
const stack = [rn];
while (visited.has(tmp)) {
tmp = visited.get(tmp);
stack.push(tmp);
}
visited.set(tmp, tmp + 1);
answer.push(tmp);
for (const st of stack) {
visited.set(st, tmp + 1);
};
}
return answer;
}
풀이 방법
- Map 객체를 생성한다.
- Map.prototype.has()를 사용하여 방이 이미 예약 되었는지 확인한다.
- has(key)
- 주어진 키에 연관된 값이 Map 객체에 존재하는지 여부를 불리언 값으로 반환합니다.
- 방이 없을 경우 Map.prototype.set()를 사용하여 값을 추가한다.
- set(key, value)
- Map객체에서 전달된 키의 값을 설정합니다. Map객체를 반환합니다.
- answer에 rn값을 push 한다.
- 방이 있을 경우 Map.prototype.get()을 사용하여 값을 추출한다.
- get(key)
- 주어진 키에 해당하는 값을 반환하거나 값이 없다면 undefined을 반환합니다.
- 순회하며 나온 tmp 값을 stack에 넣는다.
- 예약이 되지 않은 방을 찾은 경우 방에 tmp+1값을 넣는다.
- answer에 tmp값을 push 하고 stack에 값들을 tmp+1로 바꾼다.
- stack을 이용하는 이유
- [5, 5, 5, 5, 5, ... , 5] 형태의 배열이 나왔을 때 5번 방에 방을 배정하고 visited를 tmp+1로만 바꿀 경우 문제가 발생한다.
- 5번에 방배정하고 6번 방을 배정할 수 있게 도와주지만 5번에서 계속해서 6번 방을 요구하고 6번은 7번 방을 7번은 8번 ... n번 방까지 순회하는 문제가 발생하게 된다.
- 따라서 미리 5번 방을 6, 7, 8 ... n번 방으로 업데이트 하게 되면 시간 복잡도를 줄일 수 있게 된다.
- [5, 5, 5, 5, 5, ... , 5] 형태의 배열이 나왔을 때 5번 방에 방을 배정하고 visited를 tmp+1로만 바꿀 경우 문제가 발생한다.
느낀점
- Map과 Object에 대한 차이는 다음 사이트를 참고하는 것이 좋다.
'알고리즘 > 다시 풀어 보기' 카테고리의 다른 글
프로그래머스 [Lv. 2] 괄호 변환 {언어 : Python} [다시 풀어 보기] (0) | 2024.05.06 |
---|---|
프로그래머스 [Lv. 2] 빛의 경로 사이클 {언어 : JavaScript} [다시 풀어 보기] (2) | 2024.05.01 |
프로그래머스 [Lv. 2] 마법의 엘리베이터 {언어 : JavaScript} [다시 풀어 보기] (0) | 2024.04.18 |
프로그래머스 [Lv. 2] 시소 짝꿍 {언어 : Python} [다시 풀어 보기] (0) | 2024.04.18 |
프로그래머스 [Lv. 2] 뒤에 있는 큰 수 찾기 {언어 : Python} [다시 풀어 보기] (0) | 2024.04.16 |