https://school.programmers.co.kr/learn/courses/30/lessons/155651
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
실행코드
function solution(book_time) {
// 시작 시간 순으로 정렬해줍니다.
book_time.sort();
// 종료 시간이 들어갈 배열
const room = [];
// forEach를 통해 하나씩 확인해줍니다.
book_time.forEach((t) => {
// split() 메서드를 이용해 시간을 분리해준다.
const tmp = t[0].split(":");
// 문자열 시간을 숫자로 변환한다.
const startTime = Number(tmp[0]) * 60 + Number(tmp[1]);
// times 배열에서 시작 시간과 같거나 시작 시간보다 작은 수를 찾는다.
const idx = room.findIndex((e) => e <= startTime);
// 만약 없다면 room을 추가하고 새로운 종료시간을 넣어준다.
if (idx === -1) room.push(getNextTime(t[1]));
// 만약 있다면 기존 room의 종료시간을 변경해준다.
else room[idx] = getNextTime(t[1]);
});
// room의 갯수를 리턴해준다.
return room.length;
}
// 다음 이용 가능 시간을 리턴해주는 함수
function getNextTime(endTime) {
// split() 메서드를 이용해 시간을 분리해준다.
const next = endTime.split(":");
// 문자열 시간은 숫자로 변환해서 리턴해준다.
// 종료 시간 + 10을 해서 다음 이용 가능 시간을 리턴해준다.
// ex) => "19:20" => 1,170
return Number(next[0]) * 60 + Number(next[1]) + 10;
}
풀이:
solution 함수는 book_time 배열을 사용하며 여기서 각 요소는 회의 시작 및 종료 시간 쌍입니다. 이 함수는 탐욕적인 접근 방식을 사용하고 시작 시간을 기준으로 배열을 정렬합니다. 그런 다음 room이라는 배열을 사용하여 각 회의실에서 현재 예약된 회의의 종료 시간을 추적합니다.
forEach 메서드는 반복하는 데 사용됩니다. 정렬된 book_time 배열에 대해. 각 회의에 대해 시작 시간이 추출되고 Number() 및 산술 연산을 사용하여 분으로 변환됩니다. findIndex 메서드는 room 배열에서 시작 시간보다 작거나 같은 첫 번째 요소의 인덱스를 찾는 데 사용됩니다. 해당 요소가 없으면 room에 새로운 방이 추가되고 회의 종료 시간이 삽입됩니다. 그렇지 않으면 회의 종료 시간이 기존 회의실에 대해 업데이트됩니다.
getNextTime 함수는 회의 종료 후 다음 사용 가능한 시간을 계산하는 데 사용됩니다. "hh:mm" 형식의 종료 시간이 걸리며 split 메서드를 사용하여 시간과 분으로 나눕니다. 그런 다음 시간과 분은 Number()를 사용하여 분으로 변환되고 10을 더하여 다음 사용 가능한 시간을 반환합니다.
'알고리즘 > test' 카테고리의 다른 글
python) 프로그래머스 - 행렬의 덧셈 (0) | 2023.03.02 |
---|---|
python) 프로그래머스 - x만큼 간격이 있는 n개의 숫자 (0) | 2023.03.02 |
javascript) 프로그래머스 - 혼자서 하는 틱택토 (0) | 2023.02.27 |
javascript) 프로그래머스 - 대충 만든 자판 (0) | 2023.02.27 |
javascript) 프로그래머스 - 직사각형 별찍기 (0) | 2023.02.22 |