본문 바로가기

알고리즘 · 코딩

[프로그래머스] 호텔 방 배정

2019 카카오 개발자 겨울 인턴십

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/64063

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


C++ 풀이

#include <string>
#include <vector>
#include <map>
using namespace std;

map<long, long> room_map; //배정된 방들의 맵 <배정된 방 번호, 또 다른 고객이 원할 경우 배정될 다음 방 번호>

long long findAvailableRoomN(long long num) { //배정 가능한 방 중 가장 번호가 작은 방 찾기
	if (room_map[num] == 0) {
		return num;
	}
	else {
		room_map[num] = findAvailableRoomN(room_map[num]);
		return room_map[num];
	}
}


vector<long long> solution(long long k, vector<long long> room_number) {
	vector<long long> answer;
	long long roomN;
	long long otherRoomN;

	for(int i = 0; i < room_number.size(); i++){
		roomN = room_number[i];
		if(room_map[roomN] == 0){ //아직 배정되지 않은 방인 경우
			answer.push_back(roomN);
			room_map[roomN] = findAvailableRoomN(roomN + 1);
		}
		else{ //이미 배정된 방인 경우
			otherRoomN = findAvailableRoomN(roomN);
			answer.push_back(otherRoomN);
			room_map[otherRoomN] = findAvailableRoomN(otherRoomN + 1);
		} 
	}
	return answer; 
}

map을 사용하여 풀었다.

배정된 방의 경우 key값을 방 번호, value값을 또 다른 고객이 방을 원할 시 부여해줄 다음 방 번호로 저장하였다.

 

 

 

반응형