티스토리 뷰
오늘은 프로그래머스 코테(코딩테스트) 연습문제, 호텔 대실 문제를 풀어보겠습니다.
자세한 문제 설명은 아래링크를 참고 바랍니다.
호텔 대실 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를 활용하여 풀어보았습니다.
제가 공유드리는 풀이가 최적해가 아닐 수 있습니다. 풀이와 관련해서 의견있으시면 언제든 댓글로 부탁드립니다. 감사합니다. 😁
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
프로그래머스 2단계, 무인도 여행 DFS 알고리즘 문제 풀이 (0) | 2023.02.02 |
---|---|
프로그래머스 2단계 연습문제, 롤케이크 자르기 swift 풀이 (0) | 2023.02.01 |
백준 13565 침투, DFS 깊이우선탐색 swift언어 문제풀이 (0) | 2022.02.07 |
백준 2331, 반복수열 swift dictionary, 거듭제곱 풀이 (0) | 2021.12.25 |
백준 1799, 비숍 백트래킹 backtracking 스위프트 문제풀이 (0) | 2021.12.21 |
- Total
- Today
- Yesterday
- 스위프트
- 백준swift
- 알고리즘문제
- publisher
- swift string
- 자연어처리
- Protocol
- 컬렉션
- 부스트코스
- 개발자문서
- 프로토콜
- ios
- 알고리즘
- SwiftUI
- CoreML
- createML
- swift알고리즘
- swift문제
- swift reduce
- swift 문자열
- swift 기초
- 프로그래머스
- 김프매매
- 프로그래머스swift
- Collection
- Swift 알고리즘
- 백준알고리즘
- uikit
- swift언어
- swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |