๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/PS

๋ฐฑ์ค€ - 17144๋ฒˆ: ๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•! ๋ฌธ์ œ ํ’€์ด ๊ณผ์ • ์ •๋ฆฌ (C++)

by kkkdh 2022. 9. 25.
728x90

๐Ÿ’Ž "๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•!" ๋ฌธ์ œ ํ’€์ด ์ •๋ฆฌ!

์ด๋ฒˆ์— ์นด์นด์˜ค ์ฝ”ํ…Œ๋ฅผ ๋ณด๊ณ  ๋นก๊ตฌํ˜„ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธˆ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค ์‹ถ์–ด์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

solved.ac์—์„œ class 4์— ์žˆ๋Š” ๋ฌธ์ œ์ธ๋ฐ, ์˜ˆ์ „์— ํ•œ ๋ฒˆ ํ’€๋ ค๋‹ค๊ฐ€ ๊ท€์ฐฎ์•„์„œ ์•ˆ ํ’€์—ˆ๋˜ ๊ฒƒ๋„ ์ƒ๊ฐ๋‚˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ๋งํฌ๐Ÿ˜€


๋ฌธ์ œ ์„ค๋ช…

๋ฏธ์„ธ๋จผ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์‚ฌ๊ณผ๋Š” ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์‚ฌ๊ณผ๋Š” ์ง‘์„ ํฌ๊ธฐ๊ฐ€ R×C์ธ ๊ฒฉ์žํŒ์œผ๋กœ ๋‚˜ํƒ€๋ƒˆ๊ณ , 1×1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆด๋‹ค. ๊ตฌ์‚ฌ๊ณผ๋Š” ๋›ฐ์–ด๋‚œ ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ด์šฉํ•ด ๊ฐ ์นธ (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ–ˆ๋‹ค. (r, c)๋Š” rํ–‰ c์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋Š” ํ•ญ์ƒ 1๋ฒˆ ์—ด์— ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ํฌ๊ธฐ๋Š” ๋‘ ํ–‰์„ ์ฐจ์ง€ํ•œ๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ์นธ์—๋Š” ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๊ณ , (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์€ Ar,c์ด๋‹ค.

1์ดˆ ๋™์•ˆ ์•„๋ž˜ ์ ํžŒ ์ผ์ด ์ˆœ์„œ๋Œ€๋กœ ์ผ์–ด๋‚œ๋‹ค.

  1. ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ํ™•์‚ฐ๋œ๋‹ค. ํ™•์‚ฐ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์นธ์—์„œ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค.
    • (r, c)์— ์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€๋Š” ์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์‚ฐ๋œ๋‹ค.
    • ์ธ์ ‘ํ•œ ๋ฐฉํ–ฅ์— ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์นธ์ด ์—†์œผ๋ฉด ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” ํ™•์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ™•์‚ฐ๋˜๋Š” ์–‘์€ Ar,c/5์ด๊ณ  ์†Œ์ˆ˜์ ์€ ๋ฒ„๋ฆฐ๋‹ค.
    • (r, c)์— ๋‚จ์€ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์€ Ar,c - (Ar,c/5)×(ํ™•์‚ฐ๋œ ๋ฐฉํ–ฅ์˜ ๊ฐœ์ˆ˜) ์ด๋‹ค.
  2. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค.
    • ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์—์„œ๋Š” ๋ฐ”๋žŒ์ด ๋‚˜์˜จ๋‹ค.
    • ์œ„์ชฝ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•˜๊ณ , ์•„๋ž˜์ชฝ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•œ๋‹ค.
    • ๋ฐ”๋žŒ์ด ๋ถˆ๋ฉด ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ๋ฐ”๋žŒ์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ ๋ชจ๋‘ ํ•œ ์นธ์”ฉ ์ด๋™ํ•œ๋‹ค.
    • ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์—์„œ ๋ถ€๋Š” ๋ฐ”๋žŒ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์—†๋Š” ๋ฐ”๋žŒ์ด๊ณ , ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋กœ ๋“ค์–ด๊ฐ„ ๋ฏธ์„ธ๋จผ์ง€๋Š” ๋ชจ๋‘ ์ •ํ™”๋œ๋‹ค.

๋‹ค์Œ์€ ํ™•์‚ฐ์˜ ์˜ˆ์‹œ์ด๋‹ค.

์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์— ์นธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ™•์‚ฐ์ด ์ผ์–ด๋‚ฌ๋‹ค.

์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ๋ชจ๋‘ ํ™•์‚ฐ์ด ์ผ์–ด๋‚œ๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ๋Š” ํ™•์‚ฐ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๋ฐ”๋žŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํ™˜ํ•œ๋‹ค.

๋ฐฉ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, T์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ๊ตฌ์‚ฌ๊ณผ์˜ ๋ฐฉ์— ๋‚จ์•„์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ๊ตฌํ•ด๋ณด์ž.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— R, C, T (6 ≤ R, C ≤ 50, 1 ≤ T ≤ 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ R๊ฐœ์˜ ์ค„์— Ar, c (-1 ≤ Ar,c ≤ 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๊ฐ€ ์„ค์น˜๋œ ๊ณณ์€ Ar, c๊ฐ€ -1์ด๊ณ , ๋‚˜๋จธ์ง€ ๊ฐ’์€ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์ด๋‹ค. -1์€ 2๋ฒˆ ์œ„์•„๋ž˜๋กœ ๋ถ™์–ด์ ธ ์žˆ๊ณ , ๊ฐ€์žฅ ์œ— ํ–‰, ์•„๋žซ ํ–‰๊ณผ ๋‘ ์นธ ์ด์ƒ ๋–จ์–ด์ ธ ์žˆ๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— T์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ๊ตฌ์‚ฌ๊ณผ ๋ฐฉ์— ๋‚จ์•„์žˆ๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์„ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ”‘ ํ’€์ด ์„ค๋ช…

์‚ฌ์‹ค ํšจ์œจ์ ์œผ๋กœ ์งœ๋ ค๊ณ  ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ท€์ฐฎ์•„์„œ ํ›„๋”ฑ ํ’€์–ด๋ณด์ž๋Š” ๋Š๋‚Œ์œผ๋กœ ํ’€์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ์„ ํ•  ๋งŒํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ท€์ฐฎ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์— ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•  ๋•Œ ๋” ์ž˜ ์งœ ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์–ด์จŒ๋“  ์ด๋ฒˆ ๋ฌธ์ œ ์„ค๋ช…์„ ์ด์–ด๊ฐ€์ž๋ฉด, ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๋นก๊ตฌํ˜„ ์œ ํ˜•์˜ ๋ฌธ์ œ๋กœ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ธด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋”ฐ๋ผ์„œ ๊ทธ๋Œ€๋กœ๋งŒ ๊ตฌํ˜„ํ•˜๋‹ˆ ๋งž์ถœ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (์กฐ๊ธˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค..)

 

์ €๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„ (input)
  • ๋ฏธ์„ธ๋จผ์ง€์˜ ํ™•์‚ฐ (spreadDust)
  • ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๊ฐ€๋™ (airfresherOn)
  • ๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€์  ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋“ค (inRange, printStatus, totalDustAmount)

์œ„ ๋ชฉ๋ก์—์„œ ์ค‘์š”ํ•˜๋ฉด์„œ, ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ฏธ์„ธ๋จผ์ง€์˜ ํ™•์‚ฐ ๋‹ค์Œ์œผ๋กœ๋Š” ๋‹น์—ฐํ•˜๊ฒŒ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์˜ ๊ฐ€๋™ ๋ถ€๋ถ„์ด์ฃ 

 

๋ฏธ์„ธ๋จผ์ง€๋Š” ๋™์‹œ์— ํ™•์‚ฐ์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํ•˜๊ฒŒ ์ „์ฒด ์ง‘ ๋ฐฐ์—ด์˜ ์นธ์„ ๋Œ๋ฉด์„œ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ์œผ๋‹ˆ ๋ฐ”๋กœ ํ™•์‚ฐ์‹œํ‚ค์ž!๋ผ๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฏธ์„ธ๋จผ์ง€ ํ™•์‚ฐ์œผ๋กœ ์ƒˆ๋กœ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ์นธ์ด ์ƒ์„ฑ๋˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ์„œ ๊ณ„์† ํ™•์‚ฐ์ด ๋ฌดํ•œํžˆ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด์ฃ )

 

๊ทธ๋ž˜์„œ ์ €๋Š” ํ™•์‚ฐ ์ด์ „์— ํ˜„์žฌ ์ƒํƒœ์—์„œ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์žˆ๋Š” ์นธ์„ ๋จผ์ € queue ์ž๋ฃŒ ๊ตฌ์กฐ์— ๋„ฃ์€ ํ›„์— queue์—์„œ ํ•˜๋‚˜์”ฉ ๋นผ๋ฉด์„œ ํ™•์‚ฐ ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. (์ด queue์—๋Š” ํ™•์‚ฐ๋˜๋Š” ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘๋„ ๊ฐ™์ด ๋„ฃ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ™•์‚ฐ ๊ณผ์ •์—์„œ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค! ๐Ÿ˜Š)

 

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฏธ์„ธ๋จผ์ง€ ํ™•์‚ฐ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜๊ณ , ๊ณต๊ธฐ ์ฒญ์ •๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ถ€๋ถ„์€ ๊ทธ๋ƒฅ ์‹œํ‚ค๋Š” ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋‹ˆ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ(?) ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 


๐Ÿ† ์ œ์ถœ ์ฝ”๋“œ ์ „์ฒด

/*
	Date: 2022/08/23
	Brief:

	Reference:
*/
#include <iostream>
#include <queue>

#define MAX 51

using namespace std;

int arr[MAX][MAX];
int r, c, t;

void input() {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cin >> arr[i][j];
		}
	}
}

// (x, y)๊ฐ€ ๋งต ๋‚ด๋ถ€์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
bool inRange(int x, int y) {
	return (0 <= x && x < r && 0 <= y && y < c);
}

void spreadDust() {
	int dx[] = { -1, 1, 0, 0 };
	int dy[] = { 0, 0, -1, 1 };

	queue<pair<int, pair<int, int>>> q;

	// ๋จผ์ € ํ˜„์žฌ ์‹œ์  ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๋ฏธ์„ธ ๋จผ์ง€์˜ ์œ„์น˜์™€ ํผ์งˆ ์–‘์„ ํ์— ๋‹ด๋Š”๋‹ค.
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			// ๊ณต๊ธฐ์ฒญ์ •๊ธฐ๋Š” ๊ฑด๋„ˆ ๋ˆ๋‹ค.
			if (arr[i][j] == -1)
				continue;

			if (arr[i][j] != 0) {
				// ํผ์งˆ ๋ฏธ์„ธ๋จผ์ง€์˜ ์–‘๊ณผ ์œ„์น˜๋ฅผ ํ์— ๋‹ด๋Š”๋‹ค.
				q.push({ arr[i][j] / 5, {i, j} });
			}
		}
	}

	// queue์— ๋‹ด๊ธด ๋ฏธ์„ธ๋จผ์ง€๋ฅผ ๊ฐ€๋Šฅํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ๋ฒˆ์— ํผ๋œจ๋ฆฐ๋‹ค.
	while (!q.empty()) {
		int x = q.front().second.first;
		int y = q.front().second.second;
		int spreadDustAmount = q.front().first;

		q.pop();
		//cout << x << " " << y << " " << spreadDustAmount << endl;
		for (int i = 0; i < 4; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];

			if (!inRange(nx, ny) || arr[nx][ny] == -1)
				continue;

			// ํผ์ง„ ๋งŒํผ ํ•ด๋‹น ์นธ์€ ๋ฏธ์„ธ๋จผ์ง€๊ฐ€ ์ฆํ•˜๊ณ  ์›๋ž˜ ์นธ์—๋Š” ์ค„์–ด๋“ ๋‹ค.
			arr[nx][ny] += spreadDustAmount;
			arr[x][y] -= spreadDustAmount;
		}
	}
}

void airfresherOn() {
	int first = 0, second = 1;

	// ์šฐ, ์ƒ, ์ขŒ, ํ•˜ ์ˆœ์œผ๋กœ ๊ณต๊ธฐ๊ฐ€ ์ˆœํ™˜ํ•œ๋‹ค.
	int dx1[] = { 0, -1, 0, 1 };
	int dy1[] = { 1, 0, -1, 0 };

	// ๊ณต๊ธฐ ์ฒญ์ •๊ธฐ์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.
	for (int i = 0; i < r; i++) {
		if (arr[i][0] == -1) {
			first = i, second = i + 1;
			break;
		}
	}

	int x = first, y = 0;
	int prev = 0;
	int idx = 0;

	// ๊ณต๊ธฐ ์ฒญ์ •๊ธฐ๋กœ ๋Œ์•„์˜ฌ๋•Œ๊นŒ์ง€ ํ›‘๋Š”๋‹ค.
	while (1) {
		int nx = x + dx1[idx], ny = y + dy1[idx];
		
		// ๋งต์˜ ๋์„ ๋„˜์–ด๊ฐ€๋ฉด ํƒ์ƒ‰ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ๋‹ค.
		if (!inRange(nx, ny)) {
			idx++;
			continue;
		}

		// ๋‹ค์‹œ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์— ๋„๋‹ฌํ•˜๋ฉด ๊ณต๊ธฐ ์ˆœํ™˜์„ ๋ฉˆ์ถ˜๋‹ค.
		if (nx == first && ny == 0)
			break;

		// ํ•ด๋‹น ์นธ์˜ ๊ณต๊ธฐ๋ฅผ ์ด๋™์‹œํ‚ค๊ณ  ์นธ์˜ ์œ„์น˜๋„ ์ด๋™ํ•œ๋‹ค.
		int cur = arr[nx][ny];
		arr[nx][ny] = prev;
		prev = cur;
		x = nx, y = ny;
	}

	// ์šฐ, ํ•˜, ์ขŒ, ์ƒ ์ˆœ์œผ๋กœ ๊ณต๊ธฐ๊ฐ€ ์ˆœํ™˜ํ•œ๋‹ค.
	int dx2[] = { 0, 1, 0, -1 };
	int dy2[] = { 1, 0, -1, 0 };


	x = second, y = 0;
	prev = 0;
	idx = 0;

	// ๊ณต๊ธฐ ์ฒญ์ •๊ธฐ๋กœ ๋Œ์•„์˜ฌ๋•Œ๊นŒ์ง€ ํ›‘๋Š”๋‹ค.
	while (1) {
		int nx = x + dx2[idx], ny = y + dy2[idx];

		// ๋งต์˜ ๋์„ ๋„˜์–ด๊ฐ€๋ฉด ํƒ์ƒ‰ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ๋‹ค.
		if (!inRange(nx, ny)) {
			idx++;
			continue;
		}

		// ๋‹ค์‹œ ๊ณต๊ธฐ์ฒญ์ •๊ธฐ์— ๋„๋‹ฌํ•˜๋ฉด ๊ณต๊ธฐ ์ˆœํ™˜์„ ๋ฉˆ์ถ˜๋‹ค.
		if (nx == second && ny == 0)
			break;

		// ํ•ด๋‹น ์นธ์˜ ๊ณต๊ธฐ๋ฅผ ์ด๋™์‹œํ‚ค๊ณ  ์นธ์˜ ์œ„์น˜๋„ ์ด๋™ํ•œ๋‹ค.
		int cur = arr[nx][ny];
		arr[nx][ny] = prev;
		prev = cur;
		x = nx, y = ny;
	}

	return;
}

int totalDustAmount() {
	int res = 0;
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			if (arr[i][j] == -1)
				continue;
			res += arr[i][j];
		}
	}
	return res;
}

void printStatus() {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << arr[i][j] << " ";
		}
		cout << "\n";
	}
	return;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> r >> c >> t;

	input();
	
	while (t--) {
		spreadDust();
		airfresherOn();
	}

	//printStatus();

	cout << totalDustAmount();
	return 0;
}
728x90

๋Œ“๊ธ€