프로그래머스
[프로그래머스][Kotlin] 2019 카카오 개발자 겨울 인턴십 호텔 방 배정
끝까지 처음처럼
2023. 4. 17. 16:30
728x90
해당 문제는 유니온파인드 알고리즘 중 파인드의 개념과 map의 개념을 응용하여 작성 할 수 있습니다.
문제를 간단히 설명하자면
1.한 번에 한 명씩 신청한 순서대로 방을 배정합니다.
2.고객은 투숙하기 원하는 방 번호를 제출합니다.
3.고객이 원하는 방이 비어 있다면 즉시 배정합니다.
4.고객이 원하는 방이 이미 배정되어 있으면 원하는 방보다 번호가 크면서 비어있는 방 중 가장 번호가 작은 방을 배정합니다.
이때 방이 총 10개이고, 고객들이 원하는 방 번호가 순서대로 [1, 3, 4, 1, 3, 1] 일 경우 다음과 같이 방을 배정받게 됩니다.
배정 받은 방 번호는 [1,3,4,2,5,6] 입니다.
예를 들어 1번 고객이 1번방을 원할 경우 1번방이 map 내 키값이 없다면 1번방을 배정 후 1번방이 다시 호출 될 경우 2번방으로 갈 수 있도록 값을 +1하여 저장 합니다. 그리고 또 다시 다른 고객이 1번방을 원할 경우 현재 원하는 방의 값이 배정이 되어 있는지 확인 후 배정이 안되어 있다면 키값이 1번인 값을 반환합니다. 이때 다른 사람이 2번방을 가지고 있을 경우도 있으니 이때는 2번방을 키로 가지고 있는 값을 반환합니다. 글로는 해당 내용을 어떻게 구현하는지에 대하여 이해가 어려울 것 같아 바로 작성한 코드와 실행결과를 보여드리겠습니다.
class Solution {
var result = HashMap<Long,Long>()
fun solution(k: Long, room_number: LongArray): LongArray {
var answer = LongArray(room_number.size)
for(i in 0 .. room_number.size-1){
answer[i] = find(room_number[i])
}
return answer
}
fun find(want:Long):Long{
if(result[want] == null){ // 원하는 방이 비어 있을 경우
result[want] = want+1L
return want
}
result[want] = find(result[want]!!) // 원하는 방이 비어 있지 않을 경우
//ex) 1번방을 원하였으나 배정이 되어 있어 2번방을 배정 하려는데 2번방도 배정이 되어있는 경우
// 2번방을 키로 가지고 있는 값을 확인하여 재귀 호출
return result[want]!!
}
}
정확성 테스트
테스트 1 〉 | 통과 (0.03ms, 60.4MB) |
테스트 2 〉 | 통과 (0.07ms, 62.8MB) |
테스트 3 〉 | 통과 (0.06ms, 60.6MB) |
테스트 4 〉 | 통과 (0.51ms, 60.2MB) |
테스트 5 〉 | 통과 (0.11ms, 62.1MB) |
테스트 6 〉 | 통과 (0.13ms, 62MB) |
테스트 7 〉 | 통과 (0.14ms, 62.1MB) |
테스트 8 〉 | 통과 (0.03ms, 60.8MB) |
테스트 9 〉 | 통과 (0.08ms, 62MB) |
테스트 10 〉 | 통과 (0.11ms, 59.9MB) |
테스트 11 〉 | 통과 (0.08ms, 61MB) |
테스트 12 〉 | 통과 (0.19ms, 62.7MB) |
테스트 13 〉 | 통과 (0.11ms, 61.3MB) |
테스트 14 〉 | 통과 (0.08ms, 62.6MB) |
테스트 15 〉 | 통과 (0.47ms, 62.2MB) |
테스트 16 〉 | 통과 (0.52ms, 62.1MB) |
테스트 17 〉 | 통과 (0.65ms, 60.5MB) |
테스트 18 〉 | 통과 (0.99ms, 60.7MB) |
테스트 19 〉 | 통과 (1.02ms, 61.9MB) |
테스트 20 〉 | 통과 (1.43ms, 63MB) |
테스트 21 〉 | 통과 (2.40ms, 61.6MB) |
테스트 22 〉 | 통과 (1.79ms, 62.2MB) |
테스트 23 〉 | 통과 (1.24ms, 63.6MB) |
테스트 24 〉 | 통과 (3.13ms, 62MB) |
테스트 25 〉 | 통과 (0.16ms, 61.8MB) |
테스트 26 〉 | 통과 (0.41ms, 62.7MB) |
효율성 테스트
테스트 1 〉 | 통과 (345.17ms, 142MB) |
테스트 2 〉 | 통과 (442.29ms, 154MB) |
테스트 3 〉 | 통과 (263.86ms, 127MB) |
테스트 4 〉 | 통과 (314.22ms, 167MB) |
테스트 5 〉 | 통과 (317.48ms, 127MB) |
테스트 6 〉 | 통과 (398.11ms, 179MB) |
테스트 7 〉 | 통과 (334.22ms, 160MB) |