▶ 문제
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
반응형
'백준 알고리즘 > 기본수학1' 카테고리의 다른 글
[JAVA 자바] 백준 2775번 : 부녀회장이 될테야 (0) | 2022.06.12 |
---|---|
[JAVA 자바] 백준 10250번 : ACM 호텔 (0) | 2022.06.11 |
[JAVA 자바] 백준 1193번 : 분수찾기 (0) | 2022.06.11 |
[JAVA 자바] 백준 2292번 : 벌집 (0) | 2022.06.10 |
[JAVA 자바] 백준 1712번 : 손익분기점 (0) | 2022.06.10 |