๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
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