본문 바로가기

ALGORITHM

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

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);
		
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 1546 평균 (Java)  (0) 2023.01.18
백준 3052 나머지 (Java)  (0) 2023.01.17
백준 1181 단어 정렬 (Java)  (0) 2023.01.15
백준 10828 스택 (Java)  (0) 2023.01.14
백준 2309 일곱 난쟁이 (Java)  (0) 2023.01.13