[프로그래머스] 호텔 대실
2023. 6. 26. 17:33ㆍ코딩연습
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/155651
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
1) 시작 시간을 기준으로 오름차순 정렬해준다.
2) 새로운 배열 rooms를 만들어놓고 정렬된 예약 시각을 반복해서 돌린다.
3) 반복은 rooms에 있는 종료 시간보다 큰 예약 시작 시간을 찾는다.
4) 만약 rooms에 있는 종료 시간이 더 작다면 예약 종료 시간 + 10분으로 변경하고,
더 크다면 새로운 예약 종료 시간 + 10분을 추가한다.
** 주의 사항 : 퇴실 시간 기준으로 10분을 추가해주어야 한다.
function solution(book_time) {
book_time.sort(); // 시작 시간을 기준으로 정렬
/** 예약 시각을 분단위로 변경해주는 함수 */
const convertTime = (time) => {
const [h,m] = time.split(":").map(v => +v);
return h * 60 + m;
}
/** 예약 시각을 변경하여 담을 배열 */
const bookTime = book_time.map(time => {
const [start, end] = time;
return [convertTime(start), convertTime(end) + 10]
})
/** 시각을 담을 배열 */
const rooms = [];
/** 예약 시각을 반복문을 돌리며 확인. */
bookTime.forEach((time) => {
const [start, end] = time;
const idx = rooms.findIndex((room) => room <= start);
if(idx === -1) rooms.push(end);
else rooms[idx] = end;
})
return rooms.length;
}
3. 정리
- 처음에 분 단위로 돌린다고 계획하고 함수를 만들었었는데 60을 곱해야하는데 24를 곱하고 있었다....... 테스트 케이스는 맞는데 왜 채점하면 틀리는지 이해가 안갔었는데 다행히도 발견했다. 앞으로 꼼꼼하게 확인해야겠다.
- 계획대로 배열에 담고 종료 시각과 다음 시작 시각을 비교하는 방법을 생각했었는데 findIndex()가 생각나지 않아 splice()를 사용했었다. 시간 초과로 인해서 변경했다.
* 사용한 함수 : findIndex(), forEach(), map(), split(), sort()
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 1806. 부분합 (0) | 2023.06.28 |
---|---|
[프로그래머스] 롤케이크 자르기 (0) | 2023.06.26 |
[백준 알고리즘] Node.js 2667. 단지번호붙이기 (0) | 2023.06.22 |
[백준 알고리즘] Node.js 2178. 미로 탐색 (0) | 2023.06.22 |
[백준 알고리즘] Node.js 1697. 숨바꼭질 (0) | 2023.06.21 |