https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
c++로 백준 2869번 문제를 풀어보겠다.
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1 복사
2 1 5
예제 출력 1 복사
4
<문제 풀이>
1. A, B, V를 선언한 후 입력받는다.
2. (V-A)%(A-B)이 0이라면 day= (V-A)/(A-B)를 저장하고, (V-A)%(A-B)이 0이 아니라면 day= (V-A)/(A-B)+1을 저장한다.
이 문제에서 중요한 점 : 처음엔 while 반복문을 사용해 길게 작성했었으나 문제에서 요구하는 시간과 알고리즘 복잡도가 정해져있어 while 문으로는 만족시키기 어려웠다. 따라서 짧게 코드를 작성하기 위해서는 식을 사용해야만 했다.
이 식에서 V-A가 의미하는 것은 다 남은 올라가야하는 높이이고, A-B는 1일이 지났을 때 최종적으로 올라간 길이를 의미한다. 올라가야 하는 높이에서 올라간 길이를 나누어 day 수를 계산한다.
코드는 다음과 같다.

'C++' 카테고리의 다른 글
[백준 알고리즘] 10757번 : 큰 수 A+B, c++ (0) | 2022.01.22 |
---|---|
[백준 알고리즘] 1929번 : 소수 구하기, c++ (0) | 2022.01.21 |
[백준 알고리즘] 2789번 : 유학 금지, c++ (0) | 2022.01.20 |
[백준 알고리즘] 4504번 : 배수 찾기, c++ (0) | 2022.01.20 |
[백준 알고리즘] 4999번 : 야!, c++ (0) | 2022.01.20 |