시간 초과 남

import java.util.Scanner;

public class Main {

    static int up = 0;
    static int down = 0;
    static int now = 0;
    static int vertical = 0;
    static int days = 0;

    public static int moveUp(int now, int up){
        now += up;
        return now;
    }

    public static int movedown(int now, int down){
        now -= down;
        return now;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        now = 0;
        up = sc.nextInt();
        down = sc.nextInt();
        vertical = sc.nextInt();

        // 1. 낮 -> 체크
        // 2. 체크 > v return 종료
        // 2. 체크 < v -> 밤 -> 1

        while(true){
            //System.out.println("before [ " + " now : " + now + " up : " + up + " down : " + down + " vertical : " + vertical + " ]");
            now = moveUp(now, up);

            //올라간 후 목표높이보다 더올라가면 종료
            if(now >= vertical){
                days++;
                break;
            }
            //올라간 후 목표높이보다 낮으면 밤
            else{
                now = movedown(now, down);
            }
            //한사이클 돌았으니 날짜 +1
            days ++;
            //System.out.println("after [ " + " now : " + now + " up : " + up + " down : " + down + " vertical : " + vertical + " ]");
        }
        System.out.println(days);
    }
}

 

시간제한이 0.25초 라서 공식을 만들어 풀이를 해야 통과가 가능하다고함

 

첫째날 : 높이(0) + An < h(높이)

둘째날 : 높이(0) + (An - Bn) + An < h(높이)

...n 째  : 높이(0) + (n - 1)(An - Bn) + An < h

 

일절 반복문 사용은 불가능함

-> 주의 : double 형으로 나누어서 소수점 자리를 잃어버리지 않아야함

import java.util.Scanner;

public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int An = sc.nextInt();
            int Bn = sc.nextInt();
            int V = sc.nextInt();
            System.out.println( (int)Math.ceil((double) (V-An) / (An - Bn)) + 1 );
        }
}