문제 설명
[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]
스노우타운에서 호텔을 운영하고 있는 스카피는 호텔에 투숙하려는 고객들에게 방을 배정하려 합니다. 호텔에는 방이 총 k개 있으며, 각각의 방은 1번부터 k번까지 번호로 구분하고 있습니다. 처음에는 모든 방이 비어 있으며 스카피는 다음과 같은 규칙에 따라 고객에게 방을 배정하려고 합니다.
예를 들어, 방이 총 10개이고, 고객들이 원하는 방 번호가 순서대로 [1, 3, 4, 1, 3, 1] 일 경우 다음과 같이 방을 배정받게 됩니다.
원하는 방 번호배정된 방 번호
1 | 1 |
3 | 3 |
4 | 4 |
1 | 2 |
3 | 5 |
1 | 6 |
전체 방 개수 k와 고객들이 원하는 방 번호가 순서대로 들어있는 배열 room_number가 매개변수로 주어질 때, 각 고객에게 배정되는 방 번호를 순서대로 배열에 담아 return 하도록 solution 함수를 완성해주세요.
[제한사항]
MAP 라이브러리를 쓸 수 있느냐 문제인거 같다.
왠지 나는 행렬이나 MAP 쓰면 메모리 초과 날거 같아서 안했는데 시간 지나고 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
|
#include <string>
#include <vector>
#include <map>
using namespace std;
map<long long, long long> m;
long long check(long long n)
{
if(!m[n]) return n;
return m[n] = check(m[n]);
}
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++)
{
long long now = room_number[i];
if(!m[now])
{
answer.push_back(now);
m[now] = check(now + 1);
}
else
{
long long temp = check(now);
answer.push_back(temp);
m[temp] = check(temp + 1);
}
}
return answer;
}
|
cs |
ㅇ
자물쇠와 열쇠 (C++) (0) | 2020.05.14 |
---|---|
더 맵게 프로그래머스(C++) (0) | 2020.04.26 |
야근 지수 프로그래머스(c++) (0) | 2020.04.05 |
멀리 뛰기 프로그래머스(c++) (0) | 2020.04.05 |
징검다리 건너기 프로그래머스(c++) (3) | 2020.03.31 |
댓글 영역