본문 바로가기

알고리즘

백준 온라인 - 수학1 - 달팽이는 올라가고 싶다

문제 정보

문제

풀이

  • 마지막 전일 까지의 평일 이동 거리 (M) = 낮동안 올라간 거리 (A) - 미끄러진 거리만큼 이동 (B) = M
  • 마지막 날은 낮동안 모두 다 올라서므로 무조건 미끄러지는 일이 없다.
    • 그러므로 평일 이동해야하는 거리는 전체 거리 (T) 중 낮동안 올라가는 거리 (A) 를 제외 = t
  • 평일 이동 이동해야 하는 거리에서 평일 이동 거리를 나누면 평일 이동 일수가 구해짐 = t / M
    • 단, 나눈 나머지가 0 이면 나누기 몫 그대로,
    • 0 이 넘으면 몫 + 1 을 하면 실제 이동한 평일 수
  • 구해진 평일 일수 + 마지막 일을 하루 더하면 최종 이동 일수

코드

  • Java 에서 Input 을 Stream 으로 Integer 변환 처리하니까 속도 문제로 실패 처리 됨. 그 얼마되지도 않는 시간이..

import java.util.Scanner;

public class Main {
    public static int solve(int forward, int back, int instance) {
        int cha = forward - back;
        int lastInstance = instance - forward;
        int divided = lastInstance / cha;
        int rest = lastInstance % cha;
        return rest > 0 ? divided + 2 : divided + 1;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] input = scanner.nextLine().split("\\s");
        //Arrays.stream().mapToInt(Integer::parseInt).toArray();

        int forward = Integer.parseInt(input[0]);
        int back = Integer.parseInt(input[1]);
        int instance = Integer.parseInt(input[2]);

        System.out.println(solve(forward, back, instance));
    }
}