1. 문제 상세
https://www.acmicpc.net/problem/2869
2. 문제 접근
반복문을 통해 결과를 구한다면 간단하지만, 반복문을 사용할 시 문제해결 제한시간이 초과된다.while문으로 문제를 풀어봤는데 바로 시간초과..
따라서, 반복문이 아닌 이동 높이, 떨어지는 높이, 목표 높이와 결과 사이의 규칙을 찾아 해결하자.
달팽이는 A 만큼 올라가고 B 만큼 미끄러진다.
즉 하루가 지난 후 달팽이는 A - B 만큼의 거리를 이동한다.
달팽이가 목표에 도달하면 미끄러지지 않기 때문에 총 높이는 V - B 가 된다.
즉 (V - B) / (A - B) 가 총 이동 날짜가 된다.
이 때 값이 나누어 떨어지지 않는다면 하루를 더 가야한다는 뜻이므로 이동 날짜에 1을 더해주자.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int a, b, v, day;
cin >> a >> b >> v;
day = (v-b)/(a-b);
if((v-b)%(a-b) != 0) day++;
cout << day;
}
정수형 변수 a, b, v, day 를 선언한다
cin 으로 정수(거리)들을 입력받아 각각 a, b, v 에 저장한다.
day 에 v 에서 b 를 뺀 값을 a 에서 b 를 뺀 값으로 나눈 값을 저장한다.
if문으로 v 에서 b 를 뺀 값을 a 에서 b 를 뺀 값으로 나눈 나머지가 0이 아니라면 day 에 1을 더해준다.
cout 으로 day 를 출력한다.
4. 성능 확인
5. 마무리
문제의 제한시간에 주의해서 문제를 해결하자.
주어진 조건에 따라 반복문을 사용하면 연산 시간이 길어져 제한시간이 초과될 수 있다...
이 문제와 똑같은 문제를 분명히 과제로 풀었던것 같은데..
거진 2년만에 다시 공부해서 그런건지 다 까먹었나보다..
'백준 - 단계별로 풀어보기 > 일반 수학 1' 카테고리의 다른 글
[백준] 1193번 : 분수찾기 | C++ (0) | 2023.10.18 |
---|---|
[백준] 2292번 : 벌집 | C++ (0) | 2023.10.18 |
[백준] 2903번 : 중앙 이동 알고리즘 | C++ (0) | 2023.10.18 |
[백준] 2720번 : 세탁소 사장 동혁 | C++ (0) | 2023.10.18 |
[백준] 11005번 : 진법 변환 2 | C++ (0) | 2023.10.13 |