728x90

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

 

풀이

달팽이가 나무 막대를 올라가는 데 며칠이 걸리는지 구하는 문제이다.

 

문제에서 달팽이는 A미터 올라가고 B미터 미끄러지며, 총 V미터인 나무 막대를 올라가야 한다.

여기서 주의해야 할 점이 있다. A미터를 올라갔을 때 정상에 도착했다면 미끄러지지 않는다는 것이다.

 

이를 생각하며 식을 세워보면 다음과 같다.

 

달팽이가 정상에 도달하는데 N일이 걸린다고 하면 N - 1일은 (A - B) 미터를, 마지막 하루는 A미터를 올라가게 된다.

따라서 위 식을 N을 사용하여 다시 세워보면 다음과 같다.

 

 

결론적으로, N은 (V - B) / (A - B) 보다 크거나 같으면서 가장 작은 자연수라는 것을 알 수 있다.


🔔 자세한 코드 설명은 더보기 란에 작성하였습니다.

더보기

1. 필요한 변수를 입력받는다.(st : StringTokenizer 클래스 객체, br : BufferedReader 클래스 객체, A : 올라가는 거리, B : 미끄러지는 거리, V : 나무 막대의 길이)

st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());

 

2. 정상에 도달하는 데 걸리는 시간(일)을 계산한다.(day : 위 설명의 N, 올라가는 데 걸리는 시간(일))

int day = (V - B) / (A - B);

 

3. 만약 (V - B) / (A - B)가 딱 자연수로 떨어진다면, N = (V - B) / (A - B) 일 것이다.

하지만 (V - B) / (A - B)가 자연수로 떨어지지 않는다면, N은 (V - B)를 (A - B)로 나눈 몫 + 1이 될 것이다.

if((V - B) % (A - B) != 0) {
    day++;
}

 

4. day를 출력한다.

System.out.println(day);

코드

BufferedReader 클래스 StringBuilder 클래스를 이용한 코드

import java.io.*;
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;

        st = new StringTokenizer(br.readLine());
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());

        int day = (V - B) / (A - B);
        if((V - B) % (A - B) != 0) {
            day++;
        }
        System.out.println(day);
    }
}

 

틀린 부분이 있다면 정정해 주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!

728x90

+ Recent posts