-
[JavaScript]호텔 대실JavaScript_알고리즘 2024. 9. 5. 16:14
1. 문제
2. 접근 방법
- 1 ≤ book_time의 길이 ≤ 1,000
- book_time[i]는 ["HH:MM", "HH:MM"]의 형태로 이루어진 배열입니다
- [대실 시작 시각, 대실 종료 시각] 형태입니다.
- 시각은 HH:MM 형태로 24시간 표기법을 따르며, "00:00" 부터 "23:59" 까지로 주어집니다.
- 예약 시각이 자정을 넘어가는 경우는 없습니다.
- 시작 시각은 항상 종료 시각보다 빠릅니다.
book_time result [["15:00", "17:00"], ["16:40", "18:20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]] 3 [["09:10", "10:10"], ["10:20", "12:20"]] 1 [["10:20", "12:30"], ["10:20", "12:30"], ["10:20", "12:30"]] 3 3. 자바스크립트 코드
function solution(book_time) { // 정답 값 리턴 let answer = 0; // 들어온 시간 값 map을 통해서 리턴 let sortedList = book_time.map((time) => { // 시작 시간 : 를 기준으로 Number로 치환 후 리턴 let [...start] = time[0].split(":").map((value) => Number(value)); // 끝나는 시간 : 를 기준으로 Number로 치환 후 리턴 let [...end] = time[1].split(":").map((value) => Number(value)); // 시작 시간과 끝나는 시간 분으로 치환 start = start[0] * 60 + start[1]; end = end[0] * 60 + end[1]; // 시작, 끝 분으로 변환한 값 리턴 return [start, end]; }); // 리스트 정렬 sortedList.sort((a, b) => a[0] - b[0]); // 반복문을 통해서 answer 증가 for (let i = 0; i < sortedList.length; i++) { answer += 1; // i 번인덱스까지 반복문 동작 for (let j = 0; j < i; j++) { // 현재 i 번 인덱스의 시작 시간이 이전에 들어온 끝나는 시간 + 10 보다 크거나 같은 경우 if (sortedList[i][0] >= sortedList[j][1] + 10) { // answer 1 감소 answer -= 1; // 끝나는 시간 24:00 으로 갱신 처리 하여 방을 나왔다는 체크 sortedList[j][1] = 1440; break; } } } return answer; }
4. 문제를 풀고난 후 생각
- 시간 문제의 경우 보통 분으로 치환하여 접근하는 것이 편하다.
- 들어오는 Input 값을 : 을 기준으로 split 한 후 Number로 치환하여 새로운 리스트를 생성해준다.
- 분으로 치환한 리스트를 sort 하여 입실 시간을 기준으로 정렬을 진행한다.
- 정렬을 진행한 후 index 값을 1씩 증가시키며 현재 인덱스 이전의 인덱스들의 입실여부를 확인한다.
- 입실 시간이 퇴실 시간 + 10분 보다 크거나 같은 경우 이전의 인덱스 값을 1440(24:00)으로 갱신해준다.
5. 문제를 푸는데 도움이 되는 지식
- 구현
'JavaScript_알고리즘' 카테고리의 다른 글
[JavaScript]무인도 여행 (7) 2024.09.03 [JavaScript] 크기가 작은 부분 문자열 (0) 2024.08.07 [JavaScript] 대충 만든 자판 (0) 2024.08.07