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

U·2023년 3월 24일

백준

목록 보기
35/116

💻 문제


일단 이해하자🤔

  • 예를 들어, A, B, V가 각각 2, 1, 5일때를 생각해보았다.
dayAB결과
1+2-11
2+2-12
3+2-13
4+2-5

4일째 되는 낮에 5미터에 도달하기 때문에 4일째에는 내려가지 않는다.

  • 이것을 식으로 나타내면 (A - B) * (day - 1) + A = V가 된다. 즉, day = (V - A) / (A - B) + 1이 되는 것이다. 이때, (V - A) / (A - B)가 나누어 떨어지지 않을땐 (ex. 5, 1, 6) 1을 더해준다.

👀 풀이

import java.io.*;
import java.util.StringTokenizer;

public class Main3 {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));

        String str = bfr.readLine();
        StringTokenizer st = new StringTokenizer(str, " ");
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());

        int dDay = (V - A) / (A - B) + 1;

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

        bfw.write(String.valueOf(dDay));

        bfr.close();
        bfw.flush();
        bfw.close();
    }
}

아쉬웠던 점••

  • 처음엔 당연하게도 for문으로 접근했는데 이 문제의 시간 제한은 0.25초다. 즉, 반복문을 이용하지 말라는 말이다^ㅁ^
  • 그 후에 식은 위와 같았으나 1을 더하는 대신 double형으로 계산하고 Math.celi 함수를 이용해서 올림하는 방식으로 접근했었지만 마지막 예제에서 자꾸 아예 다른 값이 나와 int형으로 바꿨다. double로 해결하는 법은 없는지😅
profile
백엔드 개발자 연습생

0개의 댓글