상세 컨텐츠

본문 제목

BOJ_Math1_2869_달팽이는 올라가고 싶다 (Java)

How To Java/Algorithm Problem Solution

by 카페코더 2020. 2. 24. 18:25

본문

반응형

문제 풀이에 대한 오류 지적 및 개선 방향 제시는 항상 환영합니다.
알고리즘 문제를 엄청 잘 풀고 막 문제 보자마자 아 이거네 쉽네 ㅎㅎ 이렇게 푸는 입장이 아니라서
그 어떤 문제에 대한 비판 지적 방향제시는 언제나 감사하게 받겠습니다. 

이 문제가 올라가는 저장소 : https://github.com/hwk0911/Junit-TDD

 

hwk0911/Junit-TDD

junit + Algorithm 연습. Contribute to hwk0911/Junit-TDD development by creating an account on GitHub.

github.com

 

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
0.15 초 (추가 시간 없음) 128 MB 38473 9195 7754 27.109%

문제

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

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

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

입력

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

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

예제 입력 1

2 1 5

예제 출력 1

4

 

조건

  1. 낮에 A미터 만큼 올라간다.
  2. 밤에 잠을자며 B미터 만큼 떨어진다.
  3. V미터 만큼 올라가야 하고, 올라간 후에는 떨어지지 않는다.

단순한 나눗셈 문제다. 제한시간이 0.15라 반복문으로 풀면 틀리는 문제다.

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

public class BOJ_2869_달팽이는올라가고싶다 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] str;
        str = br.readLine().split(" ");

        int A = Integer.parseInt(str[0]);
        int B = Integer.parseInt(str[1]);
        int V = Integer.parseInt(str[2]);

        V -= A;
        A -= B;

        if(V % A == 0){
            System.out.println((V / A) + 1);
        }
        else{
            System.out.println((V / A) + 2);
        }
    }
}

단순 계산으로 문제를 해결할 수 있다. V만큼 도달해야 하고, A만큼 올라가고, B만큼 떨어진다.
도달한 후에는 더이상 떨어지지 않는다 했으니, 우선 V에서 A를 빼줘 마지막 연산을 처리한다.
낮 -> 밤 이 한 싸이클로 계산했을 때, 결과적으로 하루에 올라가는 높이는 A - B 가 된다.
따라서 A에서 B만큼을 빼 하루 올라가는 높이로 설정한다.

V를 A로 나눈 나머지가 0이라면, 마지막날 낮에 올라간 높이로 연산이 가능하고,
아니라면, 하루가 더 소모된다.

따라서 V % A == 0 이라면, V / A + 1을 출력하고,
아니라면, V / A + 2를 출력해서 문제를 해결할 수 있다.

반응형

관련글 더보기

GitHub 댓글

댓글 영역