[프로그래머스] 호텔 대실

민스킴·2023년 10월 6일
0

프로그래머스

목록 보기
2/2

프로그래머스에서 평화롭게 c++로 문제를 풀던 도중 생각치도 못하 에러가 발생했다.

띠용~~

그렇게 구현이 어려운 문제가 아니였는데 core dumped가 발생해서 놀랐다.
딱히 문제가 발생할 이유가 떠오르지 않았기 때문이다. 다른 테스트는 전부 통과한 상태였다.

바로 구글링에 들어가니 역시나 내 잘못이였다.
https://m.blog.naver.com/luku756/222125315824

위 블로그에 이유가 자세히 나와있었다. 나는 바로 Strict Weak Ordering 개념을 찾아보았다.
https://panty.run/strict-weak-ordering/

sort() 함수에 세번째 인자로 넣어주는 compere() 함수를 제대로 만들지 못한게 문제였다. 곧바로 Strict Weak Ordering을 만족하게 고쳐서 제출하니 문제없이 통과하였다.


#include <string>
#include <vector>
#include <utility>
#include <algorithm>

using namespace std;

// 시간을 정수로 변환
int convertTime(string time) {
	int hour = stoi(time.substr(0, 2));
	int minute = stoi(time.substr(3, 2));
	return hour * 60 + minute;
}
// 정렬을 위한 비교 함수
bool compare(pair<int, int> p1, pair<int, int> p2) {
	if (p1.first < p2.first)
		return true;
	else if (p1.first == p2.first && ((p1.second == 1 && p2.second == 1) || p1.second == -1))
		return true;
	else
		return false;
}

int solution(vector<vector<string>> book_time) {
	int answer = 0, cnt = 0;
	vector<pair<int, int>> time_table;
	// 시작 시간과 종료 시간을 정수로 변환하여 time_table에 저장
	for (int i=0; i<book_time.size(); ++i) {
		// 시작 시간은 +1, 종료 시간은 -1
		int startTime = convertTime(book_time[i][0]);
		// 종료 시간은 +10
		int endTime = convertTime(book_time[i][1]) + 10;
		time_table.push_back(make_pair(startTime, 1));
		time_table.push_back(make_pair(endTime, -1));
	}
	sort(time_table.begin(), time_table.end(), compare);
	// time_table을 순회하며 현재 시간에 몇 개의 객실이 사용 중인지 확인
	for (int i=0; i<time_table.size(); ++i) {
		cnt += time_table[i].second;
		answer = max(answer, cnt);
	}
	return answer;
}
profile
Boys, be ambitious!

0개의 댓글