문제
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
코드
#include<iostream>
using namespace std;
int main() {
int A; //올라가는 높이
int B; //내려가는 높이
int V; //막대기 높이
int day = 0;
cin >> A >> B >> V;
if ((V - A) % (A - B) == 0)
day = (V - A) / (A - B);
else
day = (V - A) / (A - B) + 1;
cout << ++day;
return 0;
}
코드 설명
주의점
시간제한 있음. 반복문 사용 불가.
정상에 올라간 후에는 미끄러지지 않는다.
(V - A) / (A - B)
V - A
전체 높이에서 올라간 높이를 뺀 값.
A - B
올라간 높이 - 내려간 높이. 즉, 하루에 올라간 높이
(V - A) / (A - B)
달팽이가 V - A까지 오르는 데 걸리는 날짜. 해당 값이 나누어 떨어진다면, 달팽이는 하루 뒤에 A만큼 올라 꼭대기에 도달한다.
if ((V - A) % (A - B) == 0)
day = (V - A) / (A - B);
(V - A) / (A - B)이 나누어 떨어진다면, 달팽이는 현재 V - A 위치에 있다는 뜻. 달팽이는 하루 뒤 낮에 A만큼 올라 꼭대기에 도달한다.
cout << ++day;
다음 날, 꼭대기에 도달 (다음 날이므로 하루 더해줌)
else
day = (V - A) / (A - B) + 1;
(V - A) / (A - B)이 나누어 떨어지지 않는다면, 달팽이는 현재 V - A 위치보다 아래에 있다. 따라서 하루 뒤에 +A 더 올라도 정상에 도달하지 못함. 따라서 하루 더 등락을 반복한다는 의미로 +1을 더해준다.
cout << ++day;
이튿 날 꼭대기에 도달
마무리
https://sedangdang.tistory.com/7
[C] 백준 | 2869번 코드 - *달팽이는 올라가고 싶다
>문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간
sedangdang.tistory.com
설명이 매우 깔끔하다.
'Problem Solving > 백준' 카테고리의 다른 글
[백준|파이썬] 2606: 바이러스 (실버3) (0) | 2023.04.05 |
---|---|
[백준|파이썬] 1260: DFS와 BFS (실버2) (0) | 2023.04.05 |
[백준|C++] 2750: 수 정렬하기 (0) | 2021.09.10 |
[백준|C++] 10250: ACM 호텔 (1) | 2021.09.01 |
[백준|C++] 2292: 벌집 (0) | 2021.09.01 |
[백준|C++] 1712: 손익분기점 (0) | 2021.08.31 |