반응형
예외경우 처리가 중요했던 완전탐색 문제였습니다.
풀이방법
1. 유효한 버스 도착시간의 범위(남은시간) : 영식의 도착시간 - 버스 출발시간
x번째 버스 = 남은시간 / 배차간격 , 나머지가 0이면 그대로 적용 : 나머지가 0이 아니면 +1을 적용
2. 남은시간이 음수라면 버스타지 못하므로 x번째 버스는 0
3. 영식의 도착시간보다 늦게 도착하는 버스의 도착시간 : 버스 출발시간 + 배차 * x번째버스
4. x번째버스가 버스개수 미만이라면 답을 구합니다.
답 = min(답, 3번에서 구한 시간 - 영식도착시간)
Code
#include <bits/stdc++.h>
using namespace std;
int waitTime = 0x7f7f7f7f;
struct Bus{ int startTime, gapTime, busCount; };
Bus busInfo[100000];
int main(){
int n;
int goal;
cin >> n >> goal;
for(int i = 0; i < n; i++){
cin >> busInfo[i].startTime >> busInfo[i].gapTime >> busInfo[i].busCount;
}
for(int i = 0; i < n; i++){
int startTime = busInfo[i].startTime;
int gapTime = busInfo[i].gapTime;
int leftTime = goal - startTime;
int nthBus = leftTime % gapTime <= 0 ? (leftTime / gapTime) : (leftTime / gapTime + 1);
if(nthBus < 0) nthBus=0;
int arriveTime = startTime + gapTime * nthBus;
if(nthBus < busInfo[i].busCount)
waitTime = min (waitTime,arriveTime - goal);
}
if(waitTime == 0x7f7f7f7f) cout << "-1";
else cout << waitTime << '\n';
}
'Algorithm > Brute Force' 카테고리의 다른 글
(C++) - 백준(BOJ) 1057번 : 토너먼트 답 (0) | 2021.01.22 |
---|---|
(C++) - 백준(BOJ) 2985번 : 세 수 답 (0) | 2021.01.20 |
(C++) - 백준(BOJ) 2023번 : 신기한 소수 답 (7) | 2020.10.16 |
(C++) - 백준(BOJ) 14500번 : 테트로미노 답 (0) | 2020.09.15 |
(C++) - 백준(BOJ) 18111번 : 마인크래프트 답 (1) | 2020.08.23 |