baekjoon 2869

윤동환·2022년 12월 16일
0

Algorithm

목록 보기
3/54
post-thumbnail

달팽이는 올라가고 싶다.

내가 작성한 코드

#include <iostream>
#include <string>

using namespace std;

int main() {
    int v = 0, a = 0, b = 0;
    cin >> a >> b >> v;
    int up = a - b;
    int i = (v - a) / up;
    if (i * up + a >= v) {
        ++i;
    } else if (v - a % up > 0 ) {
        i += 2;
    }
    cout << i << endl;
    return 0;
}

고민한 부분

  1. a - b를 통해서 하루에 올라가는 최종 높이를 구할 수 있으나 정상에 올라가면 내려오지 않기 때문에 마지막 날은 내려가는 계산을 하면 안된다.
  2. i = v / up로 최대 일수를 구하고 i -= b / up과 같은 방식으로 불필요한 일 수를 제거하고자 하였으나, b / up에서 발생하는 나머지 값을 또 처리를 해주어야 하는 불편함이 있었다.
  3. 최종적으론 v - a를 통하여 최소 일수를 구하고 여기에 a를 추가하여 v를 넘긴다면 하루 추가 만일 v - a/ up에서 나머지가 남았다면 내려간뒤 다시 올라가도 v에 도달할 수 없으므로 2를 추가하였다.
  4. 3번의 근거는 a - b 값으로 나눈 나머지는 아무리 커도 a 보다 2가 작을것이고, 그러기 위해선 b의 값이 1이어야 한다. 해서 나머지에 b를 더한 최대 값은 a 보다 1이 작다. 그러므로 나머지가 있다면 추가적으로 2일이 필요하다는 것을 알 수 있다.

다른 풀이 블로그

https://jhnyang.tistory.com/399
제시하는 공식 (v - 1)(a - b) + a >= v

v 에 a를 빼준것이 아닌 내려갈 b를 빼주어 나머지가 있다면 올림 함수를 통해 계산하는 방식이다.
훨씬 간단하다.....

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글