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

마뇽미뇽·2024년 7월 15일
0

알고리즘 문제풀이

목록 보기
80/165

1.문제

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

2.풀이

처음엔 올라가기만 하기 때문에 올라가는 거리만큼을 전체 거리해서 뺸 값을 올라가고 미끄러진 값의 차이만큼 나눈다.
만약 나눈 값이 소수가 된다면 올림을 사용한다. 올림을 사용하기 위해 Math.ceil을 사용했다.

3.틀린 코드

직관적으로 올라가고 내려가는 걸 반복문을 이용했고 시간초과가 나왔다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());

        long a = Long.parseLong(st.nextToken());
        long b = Long.parseLong(st.nextToken());
        long v = Long.parseLong(st.nextToken());
        int day = 1;
        long length = a;

        while (true){
            if(length >= v) break;
            else {
                length -= b;
                day++;
            }
            length += a;
        }
        System.out.println(day);
    }
}

4.정답 코드

package com.example.baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());

        long a = Long.parseLong(st.nextToken());
        long b = Long.parseLong(st.nextToken());
        long v = Long.parseLong(st.nextToken());

        double up = a - b;
        double distace = v - a;

        int day = 1;
        day += (int)Math.ceil(distace / up);
        System.out.println(day);
    }
}
profile
Que sera, sera

0개의 댓글