ALGORITHM

백준 2869 달팽이는 올라가고 싶다 (Java)

공부하는_다온 2023. 1. 16. 22:41

1. 문제 링크

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

처음에는 반복문을 이용해서 A만큼 더하고, V가 넘었는지 확인하고, B만큼 뺐다.

그러나 시간초과라는 결과가 나왔다.

0.15초의 시간 제한이 있어서 반복 횟수가 늘어날수록 시간이 늘어났을 것이다.

반복문을 빼고 풀 방법을 생각하다 식으로 풀자고 생각했다.

 

마지막날 올라간 상태에서 끝이 난다는 가정하에

올라가야 하는 길이는 V-B / 하루동안 올라가는 길이인 A-B로 생각했다.

 

V-B로 계산했다 나머지가 발생한 경우는 A-B보다 작은 길이가 남았다는 것으로

하루를 더하면 된다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        String str = br.readLine();
        String[] ing = str.split(" ");
        
        int[] num = new int[3];
        for(int i=0;i<3;i++) {
        	num[i] = Integer.parseInt(ing[i]);
        }
        
        //(num[2]-num[1]): 전체 길이에서 마지막날 올라갔을 때 도착하는 경우에서
        //(num[0]-num[1]): 하루동안 올라간 길이 를 나눈다.
        int day =  (num[2]-num[1]) / (num[0]-num[1]);
        
        if((num[2]-num[1]) % (num[0]-num[1]) != 0){ //나머지가 있으면 더 올라가야 함
        	day++;
        }
       
        sb.append(day);
        System.out.println(sb);
		
	}
}