브루트포스

[백준] 1590. 캠프가는 영식 풀이

hch06 2025. 2. 2. 18:14

https://www.acmicpc.net/problem/1590

 

각 버스에 대해
버스 탑승 시간의 최솟값을 res로 두면
도착시간이 버스 시작시간이면 res = 0
도착 시간이 버스 시작 시간 전이면 res = (버스 시작시간) - (도착시간)
도착 시간이 마지막 버스 시간 후이면 continue
이 모든것이 아니면 res = 도착 후 제일 먼저 오는 버스

각 버스에 대한 res들 중 최솟값 저장 후 최솟값이 초기화한 값(Int범위 중 가장 큰 값)이면 버스가 없음을 의미한다.

 


C

더보기
더보기
더보기
#include <stdio.h>

int main(){
    int n, t; scanf("%d %d", &n, &t);
    int min = 2147483647;
    for(int i = 1; i <= n; i++){
        int s, l, c; scanf("%d %d %d", &s, &l, &c);
        int res;

        if(t == s) res = 0;             // 도착시간 = 버스시작시간, 버스 1대
        else if(s > t) res = s - t;               // 도착 후 첫번째 버스
        else if((s + (l * c)) - l < t) continue; // 버스 탑승 불가
        else{                                    // 도착 후 먼저 오는 버스
            res = s;
            while(c--){
                if(res >= t) {res -= t; break;}
                res += l;
            }
        }
        if(res < min) min = res;
    }
    if(min == 2147483647) printf("-1");
    else printf("%d", min);
}

Python

더보기
더보기
더보기
n, t = map(int, input().split())
min = 2 ** 31

for i in range(n):
    s, l, c = map(int, input().split())
    if t == s and c == 1: res = 0      # 도착시간 = 버스시작시간, 버스 1대
    elif s > t: res = s - t            # 도착 후 첫번째 버스
    elif s + (l * c) - l < t: continue # 버스 탑승 불가
    else:                              # 도착 후 먼저 오는 버스
        res = s
        while c:
            if res >= t: res -= t; break
            c -= 1
            res += l
    if res < min: min = res
if min == 2 ** 31: print("-1")
else: print(min)