Algorithm/BOJ

[BOJ] 2869번 : 달팽이는 올라가고 싶다 (JAVA/자바)

SseopE 2022. 3. 10. 20:46

문제


알고리즘 고민

이 문제는 아래의 문제와 비슷한 느낌이었다.

2022.03.10 - [Algorithm/BOJ] - [BOJ] 1712번 : 손익분기점 (JAVA/자바)

 

[BOJ] 1712번 : 손익분기점 (JAVA/자바)

문제 알고리즘 A는 고정적인 비용, B는 가변 비용, C는 가변 이득이라 생각하고 풀이를 시작했다. B가 C 보다 크거나 같다면 제작할수록 비용이 더욱 들기때문에 불가능하므로 -1을 출력하도록 하

shinscode.tistory.com

차이점으로는 B < A 라는 조건이 주어졌기 때문에 도달하지 못하는 경우는 없었다. 또, 손익분기점은 이득이 발생해야하기 때문에 1부터 본문의 문제는 정확히 도착만하면 되기때문에 0 이어도 상관이 없다. 또, 구매와 판매처럼 동시에 이루어지는것이 아닌 올라갔다가 그날 밤에 떨어지기 때문에 경계값인 마지막날을 위한 추가적인 처리가 필요했다.

 

달팽이는 하루에 A-B 만큼의 높이만큼 올라가는데 마지막 날에는 A 미터의 높이를 올라가면서 끝나게 된다.

따라서, 높이인 V 에서 A 를 빼면 A-B만큼씩 올라갈때 도달하면 다음날 도착을 보장할 수 있는 높이를 찾을 수 있다.

 

V-A 를 구하고 A-B 로 나누어 주면 몇일이 걸리는지 확인할 수 있는데 이때 정확히 값이 안나누어 떨어질때는 남은 높이가 있다는 뜻이기에 하루를 더 더해줘야한다. 

위의 방식을 이용해 걸리는 시간을 구하고 마지막으로 A 미터만큼 올라갈때 걸리는 1일을 더해주게 되면 끝이난다.


JAVA Code

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

public class Ex04_r {
    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());

        int move = A - B, height = (V - A);
        int day = height % move == 0 ? height / move : height / move + 1;
        System.out.println(day + 1);
    }
}