Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 18185๋ฒˆ - ๋ผ๋ฉด ์‚ฌ๊ธฐ (Small) (C++)

moaoh 2023. 7. 17. 23:27

 

18185๋ฒˆ: ๋ผ๋ฉด ์‚ฌ๊ธฐ (Small)

๋ผ๋ฉด๋งค๋‹ˆ์•„ ๊ต์ค€์ด๋„ค ์ง‘ ์ฃผ๋ณ€์—๋Š” N๊ฐœ์˜ ๋ผ๋ฉด ๊ณต์žฅ์ด ์žˆ๋‹ค. ๊ฐ ๊ณต์žฅ์€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ€์—ฌ๋˜์–ด ์žˆ๋‹ค. ๊ต์ค€์ด๋Š” i๋ฒˆ ๊ณต์žฅ์—์„œ ์ •ํ™•ํ•˜๊ฒŒ Ai๊ฐœ์˜ ๋ผ๋ฉด์„ ๊ตฌ๋งคํ•˜๊ณ ์ž ํ•œ๋‹ค(1 ≤ i

www.acmicpc.net

๋ฌธ์ œ

๋ผ๋ฉด๋งค๋‹ˆ์•„ ๊ต์ค€์ด๋„ค ์ง‘ ์ฃผ๋ณ€์—๋Š” N๊ฐœ์˜ ๋ผ๋ฉด ๊ณต์žฅ์ด ์žˆ๋‹ค. ๊ฐ ๊ณต์žฅ์€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ€์—ฌ๋˜์–ด ์žˆ๋‹ค. ๊ต์ค€์ด๋Š” i๋ฒˆ ๊ณต์žฅ์—์„œ ์ •ํ™•ํ•˜๊ฒŒ Ai๊ฐœ์˜ ๋ผ๋ฉด์„ ๊ตฌ๋งคํ•˜๊ณ ์ž ํ•œ๋‹ค(1 ≤ i ≤ N).

๊ต์ค€์ด๋Š” ์•„๋ž˜์˜ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ผ๋ฉด์„ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. i๋ฒˆ ๊ณต์žฅ์—์„œ ๋ผ๋ฉด์„ ํ•˜๋‚˜ ๊ตฌ๋งคํ•œ๋‹ค(1 ≤ i ≤ N). ์ด ๊ฒฝ์šฐ ๋น„์šฉ์€ 3์›์ด ๋“ ๋‹ค.
  2. i๋ฒˆ ๊ณต์žฅ๊ณผ (i+1)๋ฒˆ ๊ณต์žฅ์—์„œ ๊ฐ๊ฐ ๋ผ๋ฉด์„ ํ•˜๋‚˜์”ฉ ๊ตฌ๋งคํ•œ๋‹ค(1 ≤ i ≤ N1). ์ด ๊ฒฝ์šฐ ๋น„์šฉ์€ 5์›์ด ๋“ ๋‹ค.
  3. i๋ฒˆ ๊ณต์žฅ๊ณผ (i+1)๋ฒˆ ๊ณต์žฅ, (i+2)๋ฒˆ ๊ณต์žฅ์—์„œ ๊ฐ๊ฐ ๋ผ๋ฉด์„ ํ•˜๋‚˜์”ฉ ๊ตฌ๋งคํ•œ๋‹ค(1 ≤ i ≤ N2). ์ด ๊ฒฝ์šฐ ๋น„์šฉ์€ 7์›์ด ๋“ ๋‹ค.

์ตœ์†Œ์˜ ๋น„์šฉ์œผ๋กœ ๋ผ๋ฉด์„ ๊ตฌ๋งคํ•˜๊ณ ์ž ํ•  ๋•Œ, ๊ต์ค€์ด๊ฐ€ ํ•„์š”ํ•œ ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ผ๋ฉด ๊ณต์žฅ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ž์—ฐ์ˆ˜ N๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋‘๋ฒˆ์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜ A1, ···, AN๊ฐ€ ์‚ฌ์ด์— ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๊ต์ค€์ด๊ฐ€ ํ•„์š”ํ•œ ์ตœ์†Œ ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•œ๋‹ค.


์ œํ•œ

๋ชจ๋“  ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

  • 3 ≤ N ≤ 10^4
  • 0 ≤ Ai ≤ 10^4 (1 ≤ i ≤ N)

์˜ˆ์ œ ์ž…๋ ฅ 1

3
1 0 1

์˜ˆ์ œ ์ถœ๋ ฅ 1

6

์˜ˆ์ œ ์ž…๋ ฅ 2

5
1 1 1 0 2

์˜ˆ์ œ ์ถœ๋ ฅ 2

13

ํ’€์ด๊ณผ์ •

๋ฌธ์ œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„์•ผ๊ฐ€ ๊ทธ๋ฆฌ๋””์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค๋ณด๋‹ˆ ์ผ๋‹จ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ  ์ ํ™”์‹์„ ์„ธ์šฐ๋Š”๊ฒƒ์— ์ง‘์ค‘ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์ด

  1. A[i] ๋ผ๋ฉด ๊ตฌ๋งค = 3์›
  2. A[i], A[i+1] ๋ผ๋ฉด ๊ตฌ๋งค = 5์›
  3. A[i], A[i+1], A[i+2] ๋ผ๋ฉด ๊ตฌ๋งค = 7์›

๋ผ๋Š” ๊ธฐ๋ณธ์ „์ œ ์กฐ๊ฑด์œผ๋กœ ๊น”๋ ค์žˆ์–ด์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ ํ™”์‹์„ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ ํ™”์‹์„ ๊ตฌ์„ฑํ•˜๋ฉด์„œ ์‹ ๊ฒฝ์“ฐ์˜€๋˜ ๋ถ€๋ถ„๋“ค์ด

  1. [2] [0] [2] ์ด๋Ÿฌํ•œ ์‹์œผ๋กœ ๊ฐ’์ด ๋“ค์–ด์˜ฌ๋•Œ 3๋ฒˆ๋ฐฉ์‹์œผ๋กœ 2๋ฒˆ ๊ตฌ๋งคํ•˜๋Š”๊ฒŒ ์ด๋“์ธ๊ฐ€ 1๋ฒˆ๋ฐฉ์‹์œผ๋กœ 4๋ฒˆ ๊ตฌ๋งคํ•˜๋Š”๊ฒŒ ์ด๋“์ธ๊ฐ€?
    [2] [0] [2] ์ด๋Ÿฌํ•œ ์‹์œผ๋กœ ๊ฐ’์ด ๋“ค์–ด์˜ฌ๋•Œ 3๋ฒˆ๋ฐฉ์‹์œผ๋กœ 2๋ฒˆ ๊ตฌ๋งคํ•˜๋Š”๊ฒŒ ์ด๋“์ธ๊ฐ€ 1๋ฒˆ๋ฐฉ์‹์œผ๋กœ 4๋ฒˆ ๊ตฌ๋งคํ•˜๋Š”๊ฒŒ ์ด๋“์ผ๊นŒ๋ฅผ
    ๊ณ ๋ฏผํ–ˆ์—ˆ์„๋•Œ๋Š” 7 * 2 = 14 , 3 * 4 = 12 ์ด๋ฏ€๋กœ ๊ฐ’์ด ์—ฐ๋‹ฌ์•„ ๋˜์–ด์žˆ์ง€์•Š๋‹ค๋ฉด ๋”ฐ๋กœ์‚ฌ๋Š”๊ฒŒ ์ด๋“์ด๋‹ค๋ผ๋Š” ๋ผ๋Š” ๊ฒฐ๋ก ์ด ๋‚˜์™”์—ˆ๋‹ค.
  2. ๋ฌด์กฐ๊ฑด ๋ผ๋ฉด๊ณต์žฅ์ด ์—ฐ๋‹ฌ์•„ ์ด์–ด์ ธ์žˆ๋‹ค๋ฉด ํ•œ๋ฒˆ์— 3๊ฐœ ์‚ฌ๋Š”๊ฒŒ ์ด๋“์ธ๊ฐ€?
    ํ•ด๋‹น ์กฐ๊ฑด์— ๋Œ€ํ•ด์„œ๋Š” ์ฒ˜์Œ์—๋Š” ๋‹น์—ฐํžˆ 3๊ฐœ๋ฅผ ์‚ฌ๋Š”๊ฒŒ ํ›จ์”ฌ ์ด๋“์ด๋‹ˆ๊นŒ 3๊ฐœ๋ฅผ ํ•œ๋ฒˆ์— ์‚ฌ์•ผ๋˜์ง€์•Š๋‚˜ ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ–ˆ์—ˆ๋Š”๋ฐ ๋ฌธ์ œ์˜ ํ‚ค ํฌ์ธํŠธ๊ฐ€ ๋˜๋Š” ๋ฐ˜๋ก€๊ฐ€ ์žˆ์—ˆ๋‹ค. ( ์ถ”ํ›„ ์„ค๋ช… )
  3. ์–ด๋– ํ•œ ๊ฒฝ์šฐ์— ๋ผ๋ฉด์„ ๊ตฌ๋งคํ•ด์•ผํ•˜๋Š”๊ฐ€?
    ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ผ๋ฉด์€ ํ•œ๋ฒˆ์— ๋งŽ์ด ๊ตฌ๋งคํ• ์ˆ˜๋ก ์ด๋“์ด๋ฏ€๋กœ 3, 2, 1๊ฐœ ์ˆœ์œผ๋กœ ๋ผ๋ฉด์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค. ํ˜„์žฌ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ A[i], A[i+1], A[i+2] ์ด 3๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ตฌ๋งค๋ฅผ ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์€ A[i], A[i+1] 2๊ฐ€์ง€๊ฐ€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ตฌ๋งค๋ฅผ ํ•˜๊ณ  A[i] ๊ฐ€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ตฌ๋งค๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ๊ทผ ์ฐจ๊ทผ ํ˜„์žฌ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๊ฐ’์„ ๊ตฌ๋งคํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.
#include <iostream>
#include <algorithm>

int		main(void)
{
	int		n, temp, money, a[10001] = {0};

	std::cin >> n;
	money = 0;
	for(int i = 0; i < n; i++)
		std::cin >> a[i];
	for(int i = n - 1; i >= 0; i--) {
		if (a[i] > 0) {
			if (0 < a[i] && 0 < a[i-1] && 0 < a[i-2]) {
				temp = std::min(std::min(a[i], a[i-1]), a[i-2]);
				money += (7 * temp);
				a[i-2] -= temp;
				a[i-1] -= temp;
				a[i] -= temp;
			}
			if (0 < a[i] && 0 < a[i-1]) {
				temp = std::min(a[i], a[i-1]);
				money += (5 * temp);
				a[i-1] -= temp;
				a[i] = temp;
			}
			if (0 < a[i]) {
				money += (3 * a[i]);
				a[i] = 0;
			}
		}
	}
	std::cout << money;

	return (0);
}

์œ„์—์„œ ์„ธ์›Œ๋‘์—ˆ๋˜ ์‹๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ–ˆ์—ˆ๋Š”๋ฐ ํ‹€๋ ธ๋‹ค๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์™œ ํ‹€๋ ธ์„๊นŒ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ์—ˆ๋Š”๋ฐ

 

๊ธ€ ์ฝ๊ธฐ - ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ก€ ์ผ€์ด์Šค

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

๋ผ๋Š” ๋ฐ˜๋ก€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฐพ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ € ๊ธ€์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฐฉ์‹์€ ์ž…๋ ฅ๊ฐ’์ด

4

2 3 2 1

ํ˜•์‹์œผ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋ ๋•Œ ์ฒ˜๋ฆฌ๋ฐฉ์‹์ด ํ•ญ์ƒ 3๊ฐœ๋ฅผ ์šฐ์„ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์“ฐ๊ฒŒ ๋˜๋ฉด

[2] [3] [2] [1]

[1] [2] [1] [1]

[0] [1] [0] [1]

[0] [0] [0] [1]

[0] [0] [0] [0]

์ธ ๋ฐฉ์‹์œผ๋กœ 7 + 7 + 3 + 3 ์œผ๋กœ ์ด 20์ด๋ผ๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ 

 

[2] [3] [2] [1]

[1] [2] [1] [1]

[0] [1] [1] [1]

[0] [0] [0] [0]

์ค‘๊ฐ„์— 2๊ฐœ๊ฐ€ ์—ฐ๋‹ฌ์•„ ์žˆ๋Š”๊ฒฝ์šฐ๋ฅผ 3๊ฐœ๊ฐ€ ์—ฐ๋‹ฌ์•„ ์žˆ๋Š”๊ฒฝ์šฐ๋ณด๋‹ค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋จผ์ € ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด 7 + 5 + 7 = 19 ๋กœ ๋” ์ž‘์€ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋Ÿฐ ๋ฐ˜๋ก€ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ˆ˜์ •ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์ค„ํ•„์š”๊ฐ€ ์žˆ์–ด๋ณด์˜€๋‹ค.

3๊ฐœ๊ฐ€ ์—ฐ๋‹ฌ์•„ ์žˆ๋Š” ๊ฒฝ์šฐ์— 3๊ฐœ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ์—†์• ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด [1] [0] [1] ๊ฐ™์€ ์—ฐ๊ฒฐ์„ ์ด ๋Š์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ์–ด์„œ

A[i + 1] ๋ณด๋‹ค A[i + 2] ์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ 3๊ฐœ์”ฉ ๋จผ์ € ์—†์• ๋Š” ์ผ์„ ์ง„ํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์ œ์ถœ์„ ํ•˜์˜€๋”๋‹ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

code

#include <iostream>
#include <algorithm>

int		main(void)
{
	int		n, money, a[10001] = {0};

	std::cin >> n;
	money = 0;
	for(int i = 0; i < n; i++)
		std::cin >> a[i];
	for(int i = 0; i < n; i++) {
		while (0 < a[i]) {
			if (a[i+1] <= a[i+2] && 0 < a[i] && 0 < a[i+1] && 0 < a[i+2]) {
				money += 7;
				a[i+2]--;
				a[i+1]--;
				a[i]--;
			}
			else if (0 < a[i] && 0 < a[i+1]) {
				money += 5;
				a[i+1]--;
				a[i]--;
			}
			else if (0 < a[i]) {
				money += 3;
				a[i]--;
			}
		}
	}
	std::cout << money;

	return (0);
}

 


ํ›„๊ธฐ

“๋ฐฑ์ค€ ์ƒ์œ„ ๋ฌธ์ œ๋Š” ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šธ๊นŒ”๋ผ๋Š” ๊ถ๊ธˆ์ฆ์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์–ด ๋ฌธ์ œ๋ฅผ ์ญˆ์šฑ ๋Œ์•„๋ณด๋‹ค๊ฐ€ ๊ทธ ๋‚˜๋งˆ ๋ฌธ์ œ๊ฐ€ ์ ‘๊ทผํ• ๋งŒ ํ•œ๊ฑฐ๊ฐ™์•„์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ๋‹ค์ด์•„์ธ๋งŒํผ ํ™•์‹คํžˆ ์ ํ™”์‹์„ ์„ธ์šฐ๋Š”๊ฒŒ ์–ด๋ ค์› ๋˜ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.