티스토리 뷰

반응형

 

 

오늘은 프로그래머스 코테(코딩테스트) 연습문제, 호텔 대실 문제를 풀어보겠습니다.
자세한 문제 설명은 아래링크를 참고 바랍니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 


호텔 대실 String 코테 문제 개요 및 입출력 예시

해당 문제는 호텔을 예약하는 시간 정보가 리스트로 제공됩니다. 예약 시작 ~ 종료 시간이 리스트 형식으로 제공되며, 이때 한 방의 예약시간은 겹칠 수 없습니다. 따라서 시간이 겹치게 되면 다른 방을 사용해야 합니다. 

또한 추가로 고려해야할 점은 각각의 예약 시간이 끝날때마다 방 청소가 10분 진행되는 조건이 있습니다.

이렇게 예약 시간 정보 리스트가 입력으로 주어질때, 사용되어야 하는 최소한의 방의 갯수를 반환하는 문제입니다. 먼저 이 문제는 시간 정보 값이 String 형태로 나오기 때문에, String 파싱에 능숙해야하고, 이를 통해서 정답을 도출해볼 수 있는 문제였습니다.

이어서 swift 언어 문제풀이를 보도록 하겠습니다.

 


호텔 대실 코테 문제 swift 풀이
String 다루기 + Hash 자료구조, Dictionary 활용하기

먼저, 문제에 사용될 extension getter를 구현해보겠습니다. "12:34"의 각각의 숫자를 쉽게 Int 타입으로 빼오기 위한 getter 입니다.

* '0' ~ '9' ascii code 값에 48을 빼면 Int 타입 값을 추출할 수 있습니다.

 

 

"12:34" 같은 문자열 값을 초단위로 변환하는 String extension의 getter입니다. 첨자접근을 쉽게 사용하기 위해 String -> RandomAccessCollection 타입의 [Character]타입으로 변환 후 초 단위 환산하여 반환해봤습니다.

 

 

18행) 이번 문제는 dictionary를 활용하여 풀어보았습니다. timeTable은 예약이 되는 시간을 초단위로 기록해둡니다. 초 단위로 카운팅을 해서 각 시간대 마다 사용되어야 하는 방의 갯수를 기록하게 됩니다.

22행) 입력으로 주어진 time 정보를 하나하나 순회합니다.

23 ~ 26행) 예약된 시간대를 초단위로 timeTable에 기록합니다. 기록할때마다, 최대 카운팅 값을 ans에 기록합니다. 이 값이 곧 정답인 최소한 사용되어야 할 방의 갯수가 됩니다.

* 각각의 예약 시간 뒤에는 청소 시간 10분이 존재합니다. 다만, 9분으로 처리하는 이유는 청소시간이 끝나자마자 바로 방이 예약될 수 때문입니다. (1시에 방 청소가 끝나면, 1시부터 예약 사용이 가능합니다.)

 


오늘은 프로그래머스 코테 문제 중 2단계 연습문제로 호텔 대실 문제를 swift의 hash 자료구조인 dictionary를 활용하여 풀어보았습니다.

제가 공유드리는 풀이가 최적해가 아닐 수 있습니다. 풀이와 관련해서 의견있으시면 언제든 댓글로 부탁드립니다. 감사합니다. 😁

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함