8000 Update 2869.cpp · jglee-Cm7/basic-algo-lecture@e69c4cd · GitHub
[go: up one dir, main page]

Skip to content

Commit e69c4cd

Browse files
Update 2869.cpp
1 parent 09c0b0d commit e69c4cd

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

0x12/solutions/2869.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,29 @@
11
// Authored by : audwns27
2-
// Co-authored by : -
2+
// Co-authored by : BaaaaaaaaaaarkingDog
33
// http://boj.kr/a9eb8b5b0eea4c5aaa2ffd3331ec2208
4-
54
#include <bits/stdc++.h>
6-
75
using namespace std;
8-
96
int main(void){
107
ios::sync_with_stdio(0);
118
cin.tie(0);
129

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;
1914
}
2015

2116
/*
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+
*/

0 commit comments

Comments
 (0)
0