File tree Expand file tree Collapse file tree 1 file changed +18
-24
lines changed Expand file tree Collapse file tree 1 file changed +18
-24
lines changed Original file line number Diff line number Diff line change 1
1
// Authored by : audwns27
2
- // Co-authored by : -
2
+ // Co-authored by : BaaaaaaaaaaarkingDog
3
3
// http://boj.kr/a9eb8b5b0eea4c5aaa2ffd3331ec2208
4
-
5
4
#include < bits/stdc++.h>
6
-
7
5
using namespace std ;
8
-
9
6
int main (void ){
10
7
ios::sync_with_stdio (0 );
11
8
cin.tie (0 );
12
9
13
- int day, night, height;
14
- cin >> day >> night >> height;
15
-
16
- cout << (height - night - 1 ) / (day-night) + 1 ;
17
-
18
- return 0 ;
10
+ int a, b, v;
11
+ cin >> a >> b >> v;
12
+ if ((v-b) % (a-b) == 0 ) cout << (v-b) / (a-b);
13
+ else cout << (v-b) / (a-b) + 1 ;
19
14
}
20
15
21
16
/*
22
-
23
- 단순 반복문으로 작성시 O(N)으로 heigth < 1,000,000,000 범위에서 시간초과
24
-
25
- 하루 동안 움직이는 거리 = (day - night)
26
- 목표 높이 = height
27
- 목표 도달 당일에는 미끄러지지 않기 때문에 총 (height - night) 높이를 올라가야 한다.
28
-
29
- (day - night)미터씩 올라가 (heigth - nigth)미터와 같거나 작은 거리가 남는 날이 정답.
30
-
31
- 만일 (height - night)가 정확히 (day - night)로 나누어떨어지지 않는다면, 몫에 1을 더한 값이 정답.
32
-
33
- 하지만 (height - night)가 정확히 (day - night)로 나누어떨어지는 경우를 감안해서 처음부터 (height - night)에 1을 더 빼고 나눈 후, 무조건 1을 더하는 방식 사용.
34
-
35
- */
17
+ 2 1 1000000000과 같은 데이터를 생각한다면 매일 매일의 움직임을 정직하게 따라가는 방식으로 구현할 경우 시간초과가 남을 알 수 있다.
18
+ 수학적으로 생각해보면 달팽이가 X일 동안 오른다고 하면 마지막 날은 A만큼, 나머지 날은 A-B만큼 오르기 때문에
19
+ (A-B) * (X-1) + A >= V이고, 이를 만족하는 가장 작은 X가 곧 답이 된다.
20
+
21
+ 식을 풀어보면
22
+ (A-B) * (X-1) + A >= V
23
+ (A-B) * X - (A-B) + A >= V
24
+ (A-B) * X + B >= V
25
+ (A-B) * X >= (V-B)
26
+ X >= (V-B) / (A-B)
27
+ 가 되고, (V-B)가 (A-B)로 나누어 떨어진다면 (V-B) / (A-B),
28
+ 나누어 떨어지지 않는다면 (V-B) / (A-B) + 1이 답이 된다.
29
+ */
You can’t perform that action at this time.
0 commit comments