[작성일: 2023. 09. 23]
https://www.acmicpc.net/problem/2869
풀이
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int up = sc.nextInt(); int down = sc.nextInt(); int height = sc.nextInt(); sc.close(); int distanceToClimb = height - down; // 달팽이가 실제로 올라가는 높이 int climbPerDay = up - down; // 달팽이가 하루에 올라가는 높이 int day = distanceToClimb / climbPerDay; if (distanceToClimb % climbPerDay != 0) { day++; } System.out.println(day); } }
달팽이는 실제로 height - down 미터 만큼만 올라가면 된다. 예를 들면 5미터 높이의 나무 막대가 있고 밤에 1미터 미끄러진다면 달팽이는 며칠이 걸리든 올라가는 높이는 4미터가 된다. 그래서 distanceToClimb를 height - down으로 설정했다.
그리고 달팽이는 하루에 up - down 만큼만 올라가면 된다. 하루에 2미터를 올라가고 1미터 만큼 떨어진다면 달팽이는 하루에 1미터 올라갈 수 있다.
결론적으로 distanceToClimb(4미터) / climbPerDay(1미터) 를 day에 넣게 되면 달팽이는 올라가는데 4일이 걸린다는 뜻이 된다.
하지만 마지막 날 낮에 정상에 도착한다면 밤에 떨어지지 않기 때문에 이걸 고려해야 한다.
distanceToClimb % climbPerDay의 나머지 값이 0이 아니라면 더 올라갈 높이가 있기 때문에 day++ 를 해주었다.