코딩테스트

[Swift 알고리즘] 프로그래머스(Lv.4) - 호텔 방 배정 / 2019 카카오 인턴십

유정주 2022. 5. 4. 00:25
반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 "프로그래머스(Lv.4) - 호텔 방 배정" 문제를 풀었습니다.

 


Github

 

GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

문제 링크

 

코딩테스트 연습 - 호텔 방 배정

 

programmers.co.kr

 


풀이

이번 문제는 해시 테이블을 이용한 문제였습니다.

 

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
}

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형