본문 바로가기
Algorithm/Baekjoon

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

by unknownomad 2022. 3. 24.

https://www.acmicpc.net/problem/2869

 

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

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

www.acmicpc.net



주의점

1. 시간 제한

 

2. 정상에 올라간 후에는 미끄러지지 않는다.


알고리즘

분석

달팽이가 하루(낮 + 밤) 동안 올라가는 높이(미터)

하루에 (A - B) 미터씩 총 V미터

BUT

달팽이가 목표 지점에 도달한 날(정상에 올라간 후)에는 미끄러지지 않는다.

➡ 총 (V - B) 미터를 올라가는 셈


결론

최소한 며칠이 걸리는지 일(日) 수 = (V - B) / (A - B)


적용

(V - B) % (A - B) == 0

남은 미터가 없다는 의미 = 정상까지 도달함

 

(V - B) % (A - B) != 0

남은 미터가 있다는 의미 = 즉 정상까지 하루 더 걸림


풀이

1. Scanner

  • Scanner도 시간 초과 나옴 ➡ BufferedReader로 적용해보자
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
 
        int A = in.nextInt(); //up
        int B = in.nextInt(); //down
        int V = in.nextInt(); //total height
 
        int day = (length - down) / (up - down);
        
        //나머지가 있다면 = 더 올라가야 한다면
        if((length - down) % (up - down) != 0) {
            day++;
        }
        System.out.println(day);
    }
}

 

2. BufferedReader

import java.io.BufferedReader;
import java.io.InputStreamReader;
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()); //up
        int B = Integer.parseInt(st.nextToken()); //down
        int V = Integer.parseInt(st.nextToken()); //total height

        int day = (length - down) / (up - down);
        
        //나머지가 있다면 = 더 올라가야 한다면
        if((length - down) % (up - down) != 0) {
            day++;
        }
        System.out.println(day);
    }
}

성능

  • BufferedReader > Scanner

 


출처 : https://st-lab.tistory.com/75

댓글