[백준] 2869 달팽이는 올라가고 싶다 - Java

Yunki Kim·2022년 12월 14일
0

백준

목록 보기
59/104
post-thumbnail

문제


링크


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        br.close();

        double A = Integer.parseInt(st.nextToken());
        double B = Integer.parseInt(st.nextToken());
        double V = Integer.parseInt(st.nextToken());

        int day = (int) Math.ceil((V - B) / (A - B));
        System.out.println(day);
    }
}

리뷰

학교에서 방정식을 배울 때 수학으로 풀었보았던 기억이나는 문제이다.
반복문을 통해 day값을 구하는 방법이 있겠지만 시간초과라는 제약이 있는 문제이므로 다르게 접근해야하는것 같았다.

일단 정상에 도착하면 미끄러지지 않는다는 n회차 낮에 도착여부가 정해지는 것이다.
몇칸이 남던간에 낮에 정상에 도착하지않으면 n+1회차에 도착하게 된다.
이것을 식으로 표현하면 다음과 같다.

1일차 낮 : A
2일차 낮 : A - B + A
3일차 낮 : A - B + A - B + A
n일차 낮 : (A - B)(N - 1) + A

=> V = AN - A - BN - B + A
	 = (A - B)N - B
   V - B = (A - B)N
   
=> N = (V - B) / (A - B) 이다.

N의 값은 항상 정수가 아니므로 3.25 일 걸린다고 한다면 결국 다음날에 도착한다는 것이므로 Math.ceil()을 통해 값을 올려준다.

0개의 댓글