Date:

1) 문제 링크

https://www.acmicpc.net/problem/2869

2) 접근

처음에는 $(v-a)/(a-b)+1$로 생각했지만 오답. $(v-a)$가 $(a-b)$로 나누어 떨어지지 않는 경우를 고려하지 않는 식이다. 그래서 나누어 떨어지는 경우를 따로 빼놓는 방식으로 코드를 설계하기 시작했다. 몇 번의 시행착오 끝에 아래와 같은 코드를 얻었다.

3) 풀이

#include <iostream>
using namespace std;

int main(void){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int v, a, b;
    cin >> a >> b >> v;

    if((v-a)%(a-b)==0) { cout << (v-a)/(a-b)+1; }
    else { cout << (v-a)/(a-b)+2; }

    return 0;
}

4) 피드백

Case를 나누지 않는 방법은 없을지 찾아보다가 아래와 같은 해법들을 찾았다.

(v+~b)/(a-b)+1
(v-b-1)/(a-b)+1

어떤 원리인 건지 아직 이해 안 된다. 고민해봐야지.

Leave a comment