백준 알고리즘/기본수학1

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

Sun720 2022. 6. 11. 10:21

▶ 문제

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

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

 설명

하루동안 달팽이가 올라갈 수 있는 거리는 A-B이다. 문제에서 B<A 조건이 있으므로 가능한 거리 계산이다.

 

예제

A : 2. 낮에 올라가는 거리

B : 1. 밤에 내려오는 거리

V : 5. 막대 길이

 

예제에서처럼 하루에 1씩 올라갈 수 있으니까 5일이 걸리겠다 싶겠지만 이 계산에서는 막대 꼭대기에 올라가고나서 한 번 내려온 후 다시 올라간 것 까지 포함하므로 정답이 아니다.

낮에 올라갔을 때 막대 꼭대기에 도착하므로 V 에서 A를 빼준 다음에 하루동안 올라가는 길이로 며칠이 걸릴 지 계산하여야 한다.

그러면 만들어지는 수식은 (V - A) / (B - A) + 1 가 된다.

 

그런데 또, V에서 A를 뺀 만큼의 거리를  B - A로 나눴을 때 나머지가 발생할 경우 마지막에 A만큼 올라갔어도 B-A 보다 작은 거리가 발생하므로 하루를 더 쳐주어야 한다. 

나머지가 발생하냐 발생하지 않느냐에 따른 조건을 나눈 후, (V - A) / (B - A) 에 1을 더할지 2를 더할지를 결정하도록 만들면 된다.

 

문제 풀이

🌱 풀이1.

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));

		String str = br.readLine();
		StringTokenizer strTo = new StringTokenizer(str, " ");
		int a = Integer.parseInt(strTo.nextToken());
		int b = Integer.parseInt(strTo.nextToken());
		int v = Integer.parseInt(strTo.nextToken());

		int n = (v - a) / (a - b);
		if ((v - a) % (a - b) == 0) {
			n += 1;
		} else {
			n += 2;
		}
		System.out.println(n);
	}

}

 

 

 

 

Log

수식을 만들어내기가 쉽지는 않았다.

항상 막대 꼭대기에 도착할 때는 낮에 올라간 것이라는 점을 처음부터 생각하지 못해서였다.

문제를 한 면만 보지 않고 다각도로 봐야겠다는 생각이 든다.

728x90
반응형