๐•ƒ๐•ฆ๐•„๐•š๐•ฃ

ใ€ŒโŒจ๏ธแด„sใ€PS/๋ฐฑ์ค€_์ˆ˜ํ•™&๊ตฌํ˜„

[Baekjoon/๋ฐฑ์ค€][2869][C/C++] ๋‹ฌํŒฝ์ด๋Š” ์˜ฌ๋ผ๊ฐ€๊ณ  ์‹ถ๋‹ค

by ๋ฃจ๋ฐ€๐•ƒ๐•ฆ๐•„๐•š๐•ฃ2023. 1. 29.
728x90
๋ฐ˜์‘ํ˜•
ใ€Ž๋ชฉ์ฐจใ€
0. ๊ฐœ์š”

1. ๋ฌธ์ œ
2. ํ’€์ด
3. ์ฝ”๋“œ

0. ๊ฐœ์š”

์ˆ˜ํ•™์  ์ˆ˜์‹์˜ ๊ตฌํ˜„์„ ํ†ตํ•˜์—ฌ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ $O(1)$์œผ๋กœ ์ค„์ด๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ˆ˜ํ•™์  ๊ธฐ๋ฒ•์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰์‹œ๊ฐ„์— ์–ผ๋งˆ๋‚˜ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

1. ๋ฌธ์ œ

https://www.acmicpc.net/problem/2869

 

2869๋ฒˆ: ๋‹ฌํŒฝ์ด๋Š” ์˜ฌ๋ผ๊ฐ€๊ณ  ์‹ถ๋‹ค

์ฒซ์งธ ์ค„์— ์„ธ ์ •์ˆ˜ A, B, V๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์„œ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

[๋ฌธ์ œ]

๋•… ์œ„์— ๋‹ฌํŒฝ์ด๊ฐ€ ์žˆ๋‹ค. ์ด ๋‹ฌํŒฝ์ด๋Š” ๋†’์ด๊ฐ€ 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;
}
728x90
๋ฐ˜์‘ํ˜•