백준 단계별로 풀어보기 [기본수학 1] 달팽이는 올라가고 싶다
https://www.acmicpc.net/problem/2869
[풀이]
처음에는 반복식을 이용해서 풀이했다. 입력범위가 커서 시간초과가 걸린다. O(1)의 상수시간 안에 풀어야 하므로 반복문을 이용하지 않고 다시 풀었다.
달팽이는 하루에 a-b 미터 씩 총 v 미터를 올라간다. 그런데 마지막 날에는 b미터만큼 미끄러지지 않으므로 총 v-b미터를 올라간 것과 같다. (v-b) / (a-b) 가 나누어 떨어지지 않으면 하루를 더 가야하므로 몫 + 1이다.
[코드]
-반복문으로 뻘짓
#include <iostream>
int main(void) {
int a, b, v, day=0, sum=0;
std::cin >> a;
std::cin >> b;
std::cin >> v;
sum = a - b; day++;
while (sum < v) {
sum += a;
if (sum >= v) {
day++;
break;
}
sum -= b;
day++;
}
std::cout << day;
return 0;
}
-수정본
#include <iostream>
int main(void) {
int a, b, v, day=0;
std::cin >> a;
std::cin >> b;
std::cin >> v;
day = (v - b) / (a - b);
if ((v-b)%(a-b) == 0) std::cout << day;
else std::cout << day + 1;
return 0;
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[c++] 백준 4948 베르트랑 공준 (0) | 2021.07.11 |
---|---|
[c++] 백준 2581 소수 (0) | 2021.07.09 |
[c++] 백준 1712 손익분기점 (0) | 2021.07.09 |
[c++] 백준 10872 팩토리얼 (0) | 2021.07.09 |
[c++] 백준 2839 설탕 배달 (0) | 2021.07.07 |