본문 바로가기

Programming/Algorithm

<코드업> 4040 : 펜션

#include <iostream>
#include <string>
using namespace std;

int cntRoom(string [], int, int); //머물 수 있는 기간 반환
int maxRoom(string [], int, int); //머물 수 있는 날이 가장 긴 방의 인덱스를 반환
int main() {
	int n, m, s, t;
	string room[102];

	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> room[i];
	cin >> s >> t;
	s; t;
	int stayRoomI = maxRoom(room, s, m);
	int cnt = 0;
	for (; s < t; s++){
		if (stayRoomI == (m + 1)) {
			cnt = -1; break;
		}
		else if (cntRoom(room, s, stayRoomI) == -1){
			stayRoomI = maxRoom(room, s, m); cnt++;
		}
	}
	printf("%d", cnt);
}
int cntRoom(string room[], int s, int row) {	//row 번 방에서 s 일 부터 머물 수 있는 기간
	int cnt = 0;

	if (room[s][row] == 'X') return -1;
	else {
		for (; room[s][row] == 'O'; s++) cnt++;
		return cnt;
	}
}
int maxRoom(string room[], int s, int m) {	//m 개의 방 중에서 s일 부터 가장 오래 머물 수 있는 방
	int index = 0;
	int max = cntRoom(room, s, index);

	for (int i = 1; i < m; i++)
		if (cntRoom(room, s, i) > max) {
			index = i;
			max = cntRoom(room, s, index);
		}
	if (index == 0 && (cntRoom(room, s, index) == -1)) return (m + 1);
	else return index;
}

'Programming > Algorithm' 카테고리의 다른 글

[C++] 백준 11047번 : 동전 0  (0) 2019.07.19
<코드업> 4713 : 공주님의 정원  (0) 2019.07.12
<코드업> 3321 : 최고의 피자  (0) 2019.07.05
<코드업> 3301 : 거스름돈  (0) 2019.07.03
<코드업> 2001 : 최소 대금  (0) 2019.07.03