[백준] 2869

ninano05·2026년 3월 27일

int 타입 나눗셈
int 타입 나눗셈 시, 소수점은 무조건 버림 됨.
무조건 올림을 하고 싶다면
A/B인 상황에서
(A+(B-1)) / B를 하면 int 계산시에는 무조건 올림이 된다.
=> 나머지가 없으면 0.n이 돼서 원래 몫으로 잘 나오고
=> 나머지가 있으면 B-1 값이 더해저 올림이 된다.

시간초과 X

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());
        int len = A-B; // 하루 이동 거리
        int day; // 최종 걸린 날

        // 마지막 날에는 자지 않더라도 A 만큼 이동할 수 있음
        V-=A;
        // 즉 V에서 A를 뺀 값에서 하루 이동거리에 대한 몫을 구하면 됨 (나머지가 없고 몫이 0인 경우 제외)
        day = (V+len-1)/len + 1; // 나머지가 0인 경우는 버림이 되기 때문에 괜찮, 나머지가 있을 경우만 무조건 올림처리 된다.
        
        bw.write(day+"");
        bw.flush();
        bw.close();
        br.close();
    }
}

시간 초과한 코드

반복문 대신, 하루 최종 이동 거리에 대한 몫과 나눗셈으로 계산하고
마지막 날에만 확인해서 처리하는 것이 좋을듯.

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());
        int day = 1; // 1일차 부터 시작임

        while(V > 0) { // 남은 거리가 0이하이면 탈출
            // 낮에 이동
            V -= A;
            if(V <= 0) break; // 이동한 뒤 남은 거리 없으면 빠져나가기
            // 잠자기
            V+=B;
            day++;
        }
        bw.write(day+"");
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
초보 개발자

0개의 댓글