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

박영준·2023년 5월 22일
0

코딩테스트

목록 보기
135/300


해결법

방법 1

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
 
		int up = in.nextInt();		// 낮 ↑
		int down = in.nextInt();	// 밤 ↓
		int height = in.nextInt(); 	// 높이
 
 		// 정상 도달 전에 내려가지 않고 바로 정상에 도착할 경우
		int day = (height - down) / (up - down)
        
		// 정상 도달 전에 한 번 내려갈 경우 (+1일 추가 소요됨) (하루에 오르는 높이 < 정상까지의 높이 인 경우)
        if ((height - down) % (up - down) != 0) {
			day++;
		}
        
		System.out.println(day);
	}
}
  • 낮에만 올라갈 수 있으므로, 정상에 도착할 때는 무조건 '낮'이다.

  • int day = (height - down) / (up - down);

    • height - down = 정점에 도착하기 전에는 무조건 한 번 down 된다. 따라서, 달팽이가 올라야되는 총 높이를 의미
      • 만약 이 조건이 없없더라면, int day = heigh / (up - down);
    • up - down = 하루동안 오르는 높이
  • 예시

    • 낮, 밤

      • 1일차 낮 = A
      • 1일차 밤 = A - B
      • 2일차 낮 = A - B + A
      • 2일차 밤 = A - B + A - B
      • 3일차 낮 = A - B + A - B + A
      • 3일차 밤 = A - B + A - B + A - B
      • 4일차 낮 = A - B + A - B + A - B + A
      • 4일차 밤 = A - B + A - B + A - B + A - B
    • '낮' 만 도출해보면

      • 1일차 낮 = A
      • 2일차 낮 = A - B + A
      • 3일차 낮 = A - B + A - B + A
      • 4일차 낮 = A - B + A - B + A - B + A
    • 공식으로 풀어보자면 (V: 높이, A: 낮↑, B: 밤↓)

      • V = AX - A - BX + B + A
      • V = X * (A - B) + B
      • V - B = X * (A - B)
      • X = (V - B) / (A - B) 이 나온다.

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


참고: [백준] 2869번 : 달팽이는 올라가고 싶다 - JAVA [자바]

profile
개발자로 거듭나기!

0개의 댓글