[백준] 2869번 : 달팽이는 올라가고 싶다 - JAVA [자바]
https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만,
st-lab.tistory.com
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int A = Integer.parseInt(str[0]);
int B = Integer.parseInt(str[1]);
int V = Integer.parseInt(str[2]);
int day = (V - B) / (A - B);
if ((V - B) % (A - B) != 0) {
day++;
}
System.out.println(day);
}
}
처음에는 반복문으로 풀었었는데 이 문제에서는 반복문을 쓰지 않고 시간 제한을 초과하지 않도록 하는 게 포인트였다.
근데 계속 저 전체 길이에서 왜 B 길이를 빼주는지 이해가 안 갔다. 이 문제 포스팅만 10개도 넘게 보면서 다른 사람들이 어떻게 해석을 썼는지 들여다보고 노트에 써보고 난리를 쳤다. 난 왜 이런 간단한 수학 문제가 더 어려운 건지...
어쨌든 내가 이해한 바로는 이렇다. 정상에 도달하면 미끄러지지 않는다는 조건이 제일 중요하다. 계~속 (A - B) 값을 올라가다가 마지막 날에는 A 값만 더해진다. 전제는 언젠가는 정상에 도착한다는 것이고 그 정상에 도달하면 미끄러지지 않으니까 마지막 날에는 B값을 빼지 않게 된다. 그러니까 전체 길이에서 애초에 B값을 뺀 후에 (A - B)값을 나눠서 일수를 계산하는 것이다. 아 드디어 이해했다.
참고. 수식을 만드는 게 중요! 계속 반복문으로 풀다 보면 이런 시간 제한 문제를 통과 못할 수도 있다.
'Computer Science > Algorithm' 카테고리의 다른 글
[알고리즘] 빅오 표기법(Big-O notation) 이해하기 (0) | 2022.09.19 |
---|---|
[백준] 2839 - 설탕 배달 (Java) (0) | 2022.09.18 |
[백준] 1193번 - 분수찾기 (Java) (0) | 2022.09.18 |
[JAVA] 알파벳 찾기 (0) | 2022.03.22 |
[JAVA] 한수 (0) | 2022.03.09 |