반응형
처음 이 문제를 접근했을 때는 while문으로 낮과 밤에 올라가고 내려가는 수를 계산하기로 했었다.
예시 문제에 대한 정답은 맞았으나, 시간초과라는 결과가 떠서 다른 식으로 접근해야했는데,
문제를 보면 낮과 밤에 올라가고 내려가는 것을 수식으로 결정할 수가 있다.
우선 항상 모든 방식은 A - B + A - B + A - B + ... + A - B + A 패턴으로 이어지며 무조건 A가 더해지면서 끝나게 되어있다.
막대기를 다 올라간 경우 내려올 일은 없으니까.
따라서 걸린 일 수를 x 변수로 설정하고 수식화 하면 xA - (x-1)B >= V 가 나오고 정리하면 x >= (V - B) / (A - B) 가 된다.
여기서 오른쪽 식이 딱 떨어지는 경우와 아닌 경우로 나위어서 딱 떨어질 경우 그대로 x를 출력하면 되고 딱 떨어지지 않으면 int형으로 소숫점이 날아가기 때문에 +1을 해주어 출력해주면 된다.
#include <iostream>
#include <cmath>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int A, B, V;
cin >> A >> B >> V;
if((V - B) % (A - B) == 0)
cout << (V - B) / (A - B);
else
{
cout << (V - B) / (A - B) + 1;
}
return 0;
}
반응형
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
백준 10757 큰 수 A + B (0) | 2021.02.03 |
---|---|
백준 1193 분수찾기 (0) | 2021.02.02 |
백준 2292 벌집 (0) | 2021.02.01 |
백준 9102 괄호 (0) | 2021.01.29 |
백준 1436 영화감독 숌 (0) | 2021.01.29 |