728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/155651#
문제 풀이 방법
나는 이 문제를 봤을 때 생각나는 문제가 있었다.
문제의 예시가 비슷해서 그런거 같다.
구현으로 문제를 풀었다.
입실 시간을 기준으로 정렬해준뒤 booked배열에 배정된 방을 넣어준다.
이후 배정되있는 방의 체크아웃 시간과 다음 예약 체크인 시간을 비교해 10분의 갭 이상이 있다면 그 방에, 없다면 다른 방에 배정한다.
하지만 호텔 대실 문제는 구현으로 풀어보았지만 예상외로 에러가 발생했다.
테스트 케이스중 시간계산(1253 ➡ 1303)을 해줘야 하는데 이걸 또 한답시고 해봤지만 안됬다...
아래의 코드는 89점이 나와 다른 코드를 다시 작성했다.
const solution = (book_time) => {
let data = book_time.map((e) => [e[0].split(':'), e[1].split(':')]).sort((a, b) => a[0][0] - b[0][0] || a[0][1] - b[0][1]);
let booked = [[data[0].map(e => e.join(''))]];
// data를 index = 1 부터 순회하며 로직 계산
for(let i=1; i<data.length; i++){
let checkin = data[i][0];
let calCheckin = checkin[1] - 10 > 59 ? checkin.join('') - 40 : checkin.join('') - 10;
let n = 1001;
// data[i] 요소가 앞서 체크인 하는 방과의 시간이 곂치는 확인 하는 반복문
for(let j = 0; j<booked.length; j++){
const bookedOut = booked[j][booked[j].length-1][1];
if(bookedOut <= calCheckin){
n = j;
}
if(n !== 1001){
booked[j].push(data[i].map(e => e.join('')));
break;
}
}
if(n === 1001){
booked.push([data[i].map(e => e.join(''))]);
}
}
return booked.length;
}
그래서 시간을 분 단위로 정리하는 함수를 활용하기로 했다.
완성된 코드
const solution = (m, musicinfos) => {
let answer = [];
let list = musicinfos.map(e => {
const [st, end, name, code] = e.split(',');
const [stH, stM] = st.split(':');
const [endH, endM] = end.split(':');
const timeGap = (endH - stH) * 60 + (endM - stM);
let editedCode = code.replace(/([A-Z])#/g, (_, group) => group.toLowerCase());
let text = '';
for(let i=0; i<timeGap; i++){
text += editedCode[i % editedCode.length];
}
return [timeGap, name, text];
});
m = m.replace(/([A-Z])#/g, (_, group) => group.toLowerCase());
for(let i=0; i<list.length; i++){
if(list[i][2].includes(m)){
answer.push([list[i][0], i, list[i][1]]);
}
}
answer.sort((a, b) => {
let apt = a[0];
let bpt = b[0];
if(apt > bpt) return -1;
else if(apt < bpt) return 1;
else return 0;
})
if(!answer.length) return '(None)';
return answer[0][2];
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 1Level / 연습문제 / 추억 점수 (0) | 2023.10.19 |
---|---|
[JS] 1Level / 연습문제 / 콜라 문제 (1) | 2023.10.17 |
[JS] 2Level / 2018 KAKAO BLIND RECRUITMENT / [3차] 방금그곡 (1) | 2023.10.13 |
[JS] 2Level / 연습문제 / 무인도 여행 (0) | 2023.10.12 |
2Level / 2021 KAKAO BLIND RECRUITMENT / 메뉴 리뉴얼 (1) | 2023.10.09 |