ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ฌธ์
2. ํ์ด
3. ์ฝ๋
0. ๊ฐ์
์ํ์ ์์์ ๊ตฌํ์ ํตํ์ฌ ์๊ฐ๋ณต์ก๋๋ฅผ $O(1)$์ผ๋ก ์ค์ด๋ฉด ํ ์ ์๋ ๋ฌธ์ ์ด๋ค. ์ํ์ ๊ธฐ๋ฒ์ด ์๊ณ ๋ฆฌ์ฆ์ ์คํ์๊ฐ์ ์ผ๋ง๋ ์ํฅ์ ์ค ์ ์๋์ง๋ฅผ ์๋ ค์ค๋ค.
1. ๋ฌธ์
https://www.acmicpc.net/problem/2869
[๋ฌธ์ ]
๋ ์์ ๋ฌํฝ์ด๊ฐ ์๋ค. ์ด ๋ฌํฝ์ด๋ ๋์ด๊ฐ V๋ฏธํฐ์ธ ๋๋ฌด ๋ง๋๋ฅผ ์ฌ๋ผ๊ฐ ๊ฒ์ด๋ค.
๋ฌํฝ์ด๋ ๋ฎ์ A๋ฏธํฐ ์ฌ๋ผ๊ฐ ์ ์๋ค. ํ์ง๋ง, ๋ฐค์ ์ ์ ์๋ ๋์ B๋ฏธํฐ ๋ฏธ๋๋ฌ์ง๋ค. ๋, ์ ์์ ์ฌ๋ผ๊ฐ ํ์๋ ๋ฏธ๋๋ฌ์ง์ง ์๋๋ค.
๋ฌํฝ์ด๊ฐ ๋๋ฌด ๋ง๋๋ฅผ ๋ชจ๋ ์ฌ๋ผ๊ฐ๋ ค๋ฉด, ๋ฉฐ์น ์ด ๊ฑธ๋ฆฌ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
[์ ๋ ฅ]
์ฒซ์งธ ์ค์ ์ธ ์ ์ A, B, V๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด์ ์ฃผ์ด์ง๋ค. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
[์ถ๋ ฅ]
์ฒซ์งธ ์ค์ ๋ฌํฝ์ด๊ฐ ๋๋ฌด ๋ง๋๋ฅผ ๋ชจ๋ ์ฌ๋ผ๊ฐ๋๋ฐ ๋ฉฐ์น ์ด ๊ฑธ๋ฆฌ๋์ง ์ถ๋ ฅํ๋ค.
[์์ ์ ๋ ฅ 1]
2 1 5
[์์ ์ถ๋ ฅ 1]
4
[์์ ์ ๋ ฅ 2]
5 1 6
[์์ ์ถ๋ ฅ 2]
2
[์์ ์ ๋ ฅ 3]
100 99 1000000000
[์์ ์ถ๋ ฅ 3]
999999901
2. ํ์ด
์ ๋ฌธ์ ๋ฅผ ๋จ์ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ $O(n)$ ์๊ฐ๋ด๋ก ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
int main(int argc, char* argv[]) {
/* Input */
int A, B, V; scanf("%d %d %d", &A, &B, &V);
int D = 0; // D๋ Days(์ผ์)๋ฅผ ๋ปํจ.
/* Calculate */
while (true) {
D++;
V -= A;
if (V <= 0)
break;
V += B;
}
/* Output */
printf("%d", D);
/* End */
return 0;
}
Caculate ์ฃผ์ ์์ ์๋ ๋ด์ฉ์ ์ดํด๋ณด์.
โ ์ผ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
โก A๋ฏธํฐ ์ฌ๋ผ๊ฐ ๋งํผ, ๋จ์ ๋๋ฌด ๋ง๋์ ๋์ด๋ฅผ ๊ฐฑ์ ํ๋ค.
โข ๋จ์ ๋๋ฌด ๋ง๋์ ๋์ด๊ฐ 0 ์ดํ์ผ ๊ฒฝ์ฐ, ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋ค. (์ด๋๊ฐ ๋๋ฌด ๋ง๋๋ฅผ ๋ชจ๋ ์ฌ๋ผ๊ฐ ๊ฒฝ์ฐ์ด๋ค.)
โฃ B๋ฏธํฐ ๋ด๋ ค๊ฐ ๋งํผ, ๋จ์ ๋๋ฌด ๋ง๋์ ๋์ด๋ฅผ ๊ฐฑ์ ํ๋ค.
๋จ, ์ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ ์๊ฐ์ด๊ณผ๋ก ์ค๋ต์ฒ๋ฆฌ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ ๊น?
๋ฐ๋ณต๋ฌธ ์์ ๋ด์ฉ์ ์์์ผ๋ก ๋จ์ํ ์์ผ๋ณด์. Caculate ์ฃผ์ ์์ ๋ด์ฉ์ ์์์ผ๋ก ๋ฐ๊พธ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
$V - (A * D) + B * (D - 1) <= 0$
$V - AD + BD - B <= 0$
$-AD + BD <= B - V$
$D(-A + B) <= B - V (โต B < A i.e. -A + B < 0)$
$D >= (V - B) / (A - B)$
์ด๋, ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ์ D์ ์ต์๊ฐ์ด๋ฏ๋ก, ์๋์ ๊ฐ์ ๊ตฌํ๋ฉด ์ ๋ต์ด ๋๋ค.
(int)ceil((double)(V - B) / (A - B))
3. ์ฝ๋
#pragma warning(disable:4996)
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[]) {
int A, B, V; scanf("%d %d %d", &A, &B, &V);
printf("%d", (int)ceil((double)(V - B) / (A - B)));
return 0;
}
'ใโจ๏ธแดsใPS > ๋ฐฑ์ค_์ํ&๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon/๋ฐฑ์ค][4344][C/C++] ํ๊ท ์ ๋๊ฒ ์ง (0) | 2023.02.07 |
---|---|
[Baekjoon/๋ฐฑ์ค][3052][C/C++] ๋๋จธ์ง (0) | 2023.01.31 |
[Baekjoon/๋ฐฑ์ค][2475][C/C++] ๊ฒ์ฆ์ (0) | 2023.01.27 |
[Baekjoon/๋ฐฑ์ค][10996][C/C++] ๋ณ ์ฐ๊ธฐ - 21 (0) | 2023.01.25 |
[Baekjoon/๋ฐฑ์ค][10951][C/C++] A+B - 4 (EOF) (0) | 2023.01.24 |