반응형
https://www.acmicpc.net/problem/2594
2594번: 놀이공원
첫째 줄에 놀이기구의 개수 N이 주어진다. 이어 N줄에 걸쳐 각 놀이기구의 운행시작 시각과 종료 시각이 빈 칸을 사이에 두고 주어진다. 시각은 시간단위 두 자리, 분 단위 두 자리로 구성되며 오
www.acmicpc.net
[문제]
[풀이]
놀이기구 운영 시작 시간과 종료 시간을 입력받고
일과 시작시간 10시부터 일과 마치는 시간 오후 10시(22시) 중
놀이기구를 운영하지 않는 시간(쉴 수 있는 시간) 중 제일 긴 시간을 출력하는 문제이다.
조건이 하나 더 있다. 놀이기구 운영 전 10분 운영 끝나고 10분은 쉴 수 없다.
720(720분 : 12시간)길이의 배열을 만들고 1로 초기화한다.
입력받은 시간을 분으로 바꾼 후 분에 해당하는 부분 + 운영 전 10분 + 운영 후 10분을 0으로 저장한다.
배열안에 있는 값이 1이라면 카운트를 세고, 0이라면 카운트를 초기화.
카운트가 가장 큰 값을 max에 저장 후 max 출력.
[코드]
#include <iostream>
#include <deque>
using namespace std;
int main(){
int a;
cin >> a;
deque<int> dq(720, 1);
for(int i = 0; i < a; i++){
int time;
int time2;
cin >> time >> time2;
int min = 0;
int min2 = 0;
min = time % 10;
min2 = time2 % 10;
time /= 10;
time2 /= 10;
min += (time % 10) * 10;
min2 += (time2 % 10) * 10;
time /= 10;
time2 /= 10;
min += time * 60;
min2 += time2 * 60;
int minm10 = min-610;
int minp10 = min2-590;
if(minm10 < 0){
minm10 = 0;
}
if(minp10 > 720){
minp10 = 720;
}
for(int i = minm10; i < minp10; i++){
dq[i] = 0;
}
}
int max = 0;
int cnt = 0;
for(int i = 0; i < dq.size(); i++){
if(dq[i] != 0){
cnt++;
} else{
cnt = 0;
}
if(max < cnt){
max = cnt;
}
}
cout << max;
}
반응형