본문 바로가기

[BOJ] - JAVA

[백준] 2869 : 달팽이는 올라가고 싶다 JAVA 풀이

시간제한이 있다는 걸 보긴 했지만 우선 반복문으로 풀어보았다.

결과는 당연히 시간초과였고 식을 대체 어떻게 찾아야 하나 고민을 해봤다.

V까지 올라가는 데에 필요한 날짜를 N이라고 했을 때

 

1일차 낮 :  A

1일차 밤 :  A - B

2일차 낮 :  A - B + A

2일차 밤 :  A - B + A -B

 

이런식으로 진행이 되는데 중요한 점은 이미 V에 도달했다면 더 미끄러지지 않는다는 점이다.

낮과 밤이 한 세트가 아니라는 뜻이니, 낮에 V에 도달했는지 검사하고 그렇지 않으면 하루를 더 추가하기로 했다.

 

다시 낮의 식을 보면 N*A - (N-1)*B 로 나타낼 수 있는데,

이것이 V 이상이 될 때의 N을 찾아야 하는 문제인 것이다.

 

이를 식으로 나타내면

V = N*A - N*B + B

V - B = N(A-B)

N = (V - B)/(A-B)

이때 N이 딱 나눠떨어지지 않는다면 다음날까지 가야 V에 도달할 수 있다.

 

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
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()," ");
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());
        
        if((V-B)%(A-B)==0){ // 낮에 다 도달했다면
            System.out.println((V-B)/(A-B));
        }
        else{
            System.out.println(((V-B)/(A-B))+1);
        }
        
    }
}