반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "프로그래머스(Lv.4) - 호텔 방 배정" 문제를 풀었습니다.
Github
문제 링크
풀이
이번 문제는 해시 테이블을 이용한 문제였습니다.
0. 정확도 테스트는 쉽게 통과 가능하다.
정확도 테스트는 방이 이미 차 있다면 1~k-1 까지 하나하나 확인해도 통과가 가능합니다.
하지만 효율성 테스트는 얘기가 다르죠.. ㅎ
1. 해시 테이블 생성
방 번호를 관리하는 해시 테이블을 생성합니다.
key는 방 번호, value는 다음 비어있는 방 번호입니다.
2. 비어있는 방 탐색하기
해시 테이블을 참조하여 다음 비어있는 방 번호로 접근합니다.
만약 해당 방이 비어 있다면 배열에 방 번호를 저장하고 해시 테이블을 갱신합니다.
해시 테이블의 index에 index + 1을 저장합니다.
만약 해당 방이 비어 있지 않다면 방이 비어있을 때까지 재귀적으로 방을 이동합니다.
후기
알고리즘 문제다운 문제였던 것 같습니다.
아이디어를 떠올리기는 어렵지만 떠올렸을 때 코드를 짜기는 쉬운 문제였습니다.
카카오 문제 중에서 제일 짧은 코드였던 것 같아요.
그래도 더 깔끔하게 짜는 연습을 해야겠습니다.
감사합니다!
전체 코드
import Foundation
var room: [Int64:Int64] = [:]
func findRoomNumber(_ index: Int64) -> Int64 { //빈 방을 return
guard let nextRoomNumber = room[index] else { //방이 비어있을 경우
room[index] = index + 1
return index
}
//방이 차있을 경우
let nextBlankNumber = findRoomNumber(nextRoomNumber)
room[index] = nextBlankNumber + 1 //다음 비어 있는 방 표시
return nextBlankNumber
}
func solution(_ k:Int64, _ room_number:[Int64]) -> [Int64] {
let result: [Int64] = room_number.map { findRoomNumber($0) }
return result
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형