[BOJ 2869] 달팽이는 올라가고 싶다
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