programmers.co.kr/learn/courses/30/lessons/64063
코딩테스트 연습 - 호텔 방 배정
programmers.co.kr
<풀이>
1. 고객이 원하는 방 정보를 입력받는다.
2. 규칙에 따라 방을 배정하고, 배정된 방을 반환한다.
<해법>
1. "효율성 테스트"가 있는 문제의 마음가짐
=> 단순히 구현을 요구하는 문제가 아님을 깨달아야 합니다. 문제를 읽으면서, 어떤 알고리즘 또는 자료구조를 사용할지 생각해야합니다. 저는 어떤 방에 대한 다음 방의 정보를 저장하는 방법을 생각했고, 이 때 map자료구조를 사용하였습니다.
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
32
33
34
35
36
37
38
39
40
|
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
//Key: 방 번호, Value: 다음방 번호
map<long long, long long> m;
//어떤 방의 다음 방을 갱신하는 함수
long long findNextRoom(long long roomNum) {
if (m[roomNum] == 0) {
return roomNum;
}
return m[roomNum] = findNextRoom(m[roomNum]);
}
vector<long long> solution(long long k, vector<long long> room_number) {
vector<long long> answer;
/* 해법 */
//어떤 방의 다음 방을 계속해서 갱신
for (int i = 0; i < room_number.size(); i++) {
if (m[room_number[i]] == 0) {
answer.push_back(room_number[i]);
m[room_number[i]] = findNextRoom(room_number[i] + 1);
}
else {
long long foundRoom = findNextRoom(room_number[i]);
answer.push_back(foundRoom);
m[foundRoom] = findNextRoom(foundRoom + 1);
}
}
//결과 반환
return answer;
}
|
문제해결능력에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 - 두 큐 합 같게 만들기 (0) | 2022.08.24 |
---|---|
[C++] 프로그래머스 - 성격 유형 검사하기 (0) | 2022.08.24 |
[C++] 프로그래머스 - 징검다리 건너기 (0) | 2021.05.04 |
[C++] 프로그래머스 - 다단계 칫솔 판매 (0) | 2021.05.04 |
[C++] 프로그래머스 - 행렬 테두리 회전하기 (0) | 2021.05.04 |