📍 달팽이는 올라가고 싶다
https://www.acmicpc.net/problem/2869
A와 V는 최대 10억이므로 단순히 반복문을 돌리면 시간초과 난다. (시간제한 0.25초)
정상에 올라간 후에는 미끄러지지 않으므로 한 번 올라갔다는 가정하에 V-A를 한다.
int answer = (V-A);
그 뒤로는 올라갔다 내려가는 것의 반복이므로 (A-B)로 나눈다. (B<A)
int answer = (V-A) / (A-B);
최소한 하루는 올라가야 하는데 (1<=B<V)
V와 A가 같을 경우 answer는 0이 되어버린다. 따라서 +1을 해준다.
int answer = (V-A) / (A-B) + 1;
🎱 반례
여기까지 작성하면 테스트케이스는 통과되지만 틀린 코드이다.
// 반례
5 1 8
반례의 경우, 달팽이가 나무 막대를 모두 올라가기까지 실제로 이틀이 걸리지만,
현재 식 (V-A) / (A-B) + 1 로 계산해보면 출력값은 1이 나온다. (기댓값: 2)
따라서 (V-A) / (A-B) 가 나누어 떨어지지 않는 경우도 생각해야 한다.
if((V-A) % (A-B) != 0) answer += 1;
✨ 전체 코드 ✨
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
int answer = (V-A) / (A-B) + 1;
if((V-A) % (A-B) != 0) answer += 1;
System.out.println(answer);
}
}
🌀 성능
- 메모리 : 14,116 KB
- 시간 : 124 ms
'Algorithm > Boj' 카테고리의 다른 글
[JAVA | 백준] #15836 Matrix Multiplication Calculator 🧮 (0) | 2024.07.09 |
---|---|
[JAVA | 백준] #1237 정ㅋ벅ㅋ (0) | 2024.07.08 |
[JAVA | 백준] #10163 색종이 🟩🟧🟪 (0) | 2024.07.04 |
[JAVA | 백준] #25277 Culture shock 😱⚡️ (0) | 2024.07.03 |
[JAVA | 백준] #2292 벌집 🐝🏠 (0) | 2024.06.08 |