๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 8์ฃผ์ฐจ] 15685๋ฒˆ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ ๊ณจ๋“œ4 - ์ž๋ฐ”(JAVA) / ๊ตฌํ˜„/ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

๐Ÿ“‘ ๋ฌธ์ œ

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

 

15685๋ฒˆ: ๋“œ๋ž˜๊ณค ์ปค๋ธŒ

์ฒซ์งธ ์ค„์— ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๋Š” ๋„ค ์ •์ˆ˜ x, y, d, g๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. x์™€ y๋Š” ๋“œ๋ž˜๊ณค ์ปค

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์†์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ด์ฐจ์› ์ขŒํ‘œ ํ‰๋ฉด ์œ„์—์„œ ์ •์˜๋œ๋‹ค. ์ขŒํ‘œ ํ‰๋ฉด์˜ x์ถ•์€ → ๋ฐฉํ–ฅ, y์ถ•์€ ↓ ๋ฐฉํ–ฅ์ด๋‹ค.

  1. ์‹œ์ž‘ ์ 
  2. ์‹œ์ž‘ ๋ฐฉํ–ฅ
  3. ์„ธ๋Œ€

0์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ธธ์ด๊ฐ€ 1์ธ ์„ ๋ถ„์ด๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ (0, 0)์—์„œ ์‹œ์ž‘ํ•˜๊ณ , ์‹œ์ž‘ ๋ฐฉํ–ฅ์€ ์˜ค๋ฅธ์ชฝ์ธ 0์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์ด๋‹ค.

1์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋Š” 0์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๋ ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „์‹œํ‚จ ๋‹ค์Œ 0์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ๋ ์ ์— ๋ถ™์ธ ๊ฒƒ์ด๋‹ค. ๋ ์ ์ด๋ž€ ์‹œ์ž‘ ์ ์—์„œ ์„ ๋ถ„์„ ํƒ€๊ณ  ์ด๋™ํ–ˆ์„ ๋•Œ, ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ์ ์„ ์˜๋ฏธํ•œ๋‹ค.

2์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋„ 1์„ธ๋Œ€๋ฅผ ๋งŒ๋“  ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (ํŒŒ๋ž€์ƒ‰ ์„ ๋ถ„์€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์„ ๋ถ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค)

3์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋„ 2์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ 3์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์ด๋‹ค.

์ฆ‰, K(K > 1)์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋Š” K-1์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๋ ์ ์„ ๊ธฐ์ค€์œผ๋กœ 90๋„ ์‹œ๊ณ„ ๋ฐฉํ–ฅ ํšŒ์ „ ์‹œํ‚จ ๋‹ค์Œ, ๊ทธ๊ฒƒ์„ ๋ ์ ์— ๋ถ™์ธ ๊ฒƒ์ด๋‹ค.

ํฌ๊ธฐ๊ฐ€ 100×100์ธ ๊ฒฉ์ž ์œ„์— ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๊ฐ€ N๊ฐœ ์žˆ๋‹ค. ์ด๋•Œ, ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์˜ ๋„ค ๊ผญ์ง“์ ์ด ๋ชจ๋‘ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ผ๋ถ€์ธ ์ •์‚ฌ๊ฐํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๊ฒฉ์ž์˜ ์ขŒํ‘œ๋Š” (x, y)๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ, 0 ≤ x ≤ 100, 0 ≤ y ≤ 100๋งŒ ์œ ํšจํ•œ ์ขŒํ‘œ์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๋Š” ๋„ค ์ •์ˆ˜ x, y, d, g๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. x์™€ y๋Š” ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์‹œ์ž‘ ์ , d๋Š” ์‹œ์ž‘ ๋ฐฉํ–ฅ, g๋Š” ์„ธ๋Œ€์ด๋‹ค. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10)

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋Š” ๊ฒฉ์ž ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋Š” ์„œ๋กœ ๊ฒน์น  ์ˆ˜ ์žˆ๋‹ค.

๋ฐฉํ–ฅ์€ 0, 1, 2, 3 ์ค‘ ํ•˜๋‚˜์ด๊ณ , ๋‹ค์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

  • 0: x์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ (→)
  • 1: y์ขŒํ‘œ๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ๋ฐฉํ–ฅ (↑)
  • 2: x์ขŒํ‘œ๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ๋ฐฉํ–ฅ (←)
  • 3: y์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ (↓)

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์˜ ๋„ค ๊ผญ์ง“์ ์ด ๋ชจ๋‘ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ผ๋ถ€์ธ ๊ฒƒ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 

 ๐Ÿ’ก ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฐ ์ง„ํ–‰ ๋ฐฉํ–ฅ๋“ค์€, ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆด ๋•Œ ์ผ์ •ํ•œ ๊ทœ์น™์„ ๊ฐ–๋Š”๋‹ค.

 

 ์˜ˆ๋ฅผ ๋“ค์–ด 0์„ธ๋Œ€ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฐ ์ง„ํ–‰๋ฐฉํ–ฅ์€ โžก๏ธ ์ด๋‹ค.

 ์ด๋•Œ ๋์ (๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋„๋‹ฌํ•œ ์ขŒํ‘œ)์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด,  ๊ทธ ๋‹ค์Œ ์ปค๋ธŒ๋ฅผ ๊ทธ๋ ค์•ผ ํ•  ์ง„ํ–‰ ๋ฐฉํ–ฅ์€ ์œ„์ชฝ์ด ๋œ๋‹ค โฌ†๏ธ

 ์œ„ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ๊ทœ์น™์„ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

* ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋‹ค์Œ ์ง„ํ–‰๋ฐฉํ–ฅ์„ ์ฐพ๋Š” ๊ทœ์น™

โžก๏ธ(0)์„ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด โฌ†๏ธ(1)
โฌ†๏ธ(1)์„ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด โฌ…๏ธ(2)
โฌ…๏ธ(2)๋ฅผ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด โฌ‡๏ธ(3)
โฌ‡๏ธ(3)์„ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด โžก๏ธ(0)

 

 

 ๋”ฐ๋ผ์„œ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•  ๋•Œ, ํŠน์ • ์ง„ํ–‰ ๋ฐฉํ–ฅ์—์„œ ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๋ฉด, ๋‹ค์Œ ์ง„ํ–‰ ๋ฐฉํ–ฅ์€ ์ด์ „ ๋ฐฉํ–ฅ์ธ๋ฑ์Šค+1์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 ์˜ˆ์‹œ๋ฅผ ๋” ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

 1์„ธ๋Œ€ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋Š” (โžก๏ธ, โฌ†๏ธ) ์ˆœ์„œ๋กœ ๊ทธ๋ ค์ง„๋‹ค.

 ์ด๋•Œ 2์„ธ๋Œ€ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋Š” 1์„ธ๋Œ€๋ฅผ ๊ทธ๋ฆฐ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ํ•  ๋•Œ ์ตœ๊ทผ ์ˆœ์„œ๋Œ€๋กœ (โฌ†๏ธ๋ฅผ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฐ โฌ…๏ธ)์™€ (โžก๏ธ์„ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฐ โฌ†๏ธ)์„ ์ถ”๊ฐ€๋กœ ๊ทธ๋ฆฐ (โžก๏ธ, โฌ†๏ธ, โฌ…๏ธ, โฌ†๏ธ)๊ฐ€ ๋œ๋‹ค. ์ด๋Š” ๊ตฌํ˜„ ์ฝ”๋“œ์—์„œ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค๋กœ ์ €์žฅ๋œ๋‹ค.

 ์ •๋ฆฌํ•˜์ž๋ฉด 1์„ธ๋Œ€ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฐ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค๋Š” (0,1)์ด๊ณ , 2์„ธ๋Œ€ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค๋Š” (0,1,2,1)์ด ๋œ๋‹ค.

 ์ด์ „ ์„ธ๋Œ€์˜ ๋ฐฉํ–ฅ์ธ๋ฑ์Šค๋ฅผ ํ•œ ์นธ์”ฉ ์ฆ๊ฐ€์‹œํ‚จ ๊ฐ’๋“ค์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๐Ÿ“‘  ์ •๋ฆฌ

 โœ”๏ธ ์ฃผ์–ด์ง„ ์„ธ๋Œ€๋งŒํผ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ๋“œ๋ž˜๊ณค์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฐ๋‹ค.

 โœ”๏ธ K+1์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆด ๋•Œ์—๋Š” K์„ธ๋Œ€ ๋“œ๋ž˜๊ณค ์ปค๋ธŒ๋ฅผ ๊ทธ๋ฆฐ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค๋ฅผ ์ตœ๊ทผ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฐ ํ›„, ๋์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ถ”๊ฐ€ํ•ด ๊ทธ๋ ค๋‚˜๊ฐ„๋‹ค.

 โœ”๏ธ ์ฃผ์–ด์ง„ ์„ธ๋Œ€๊นŒ์ง€ ๋ชจ๋‘ ๊ทธ๋ ธ์œผ๋ฉด, ์™„์ „ํƒ์ƒ‰์œผ๋กœ ์ •์‚ฌ๊ฐํ˜• ๊ฐœ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

  

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ์ข€ ์ผ๋‹ค......

 ๊ทธ๋ž˜๋„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ฐจ๊ทผ์ฐจ๊ทผ ์ผ๋‹จ ๋‹จ๊ณ„๋ณ„๋กœ ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ํ’€์ด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_15685_๋“œ๋ž˜๊ณค์ปค๋ธŒ_๊ณจ๋“œIV {

	static int[] dy = {0,-1,0,1};
	static int[] dx = {1,0,-1,0};
	static int direction;
	static int[][] map;
	static LinkedList<Integer> list;
	static int cx, cy;
	
	// ->(0)์„ ๋์ ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด ^(1)
	// ^(1)์„ ๋์ ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด <-(2)
	// <-(2)๋ฅผ ๋์ ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด ใ…œ(3)
	// ใ…œ(3)์„ ๋์ ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด ->(0)
	
	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		map = new int[101][101];
		list = new LinkedList<>();
		int N = Integer.parseInt(br.readLine());
		
		for (int i = 0; i < N; i++) {	//input
			StringTokenizer st = new StringTokenizer(br.readLine());
			cx = Integer.parseInt(st.nextToken());
			cy = Integer.parseInt(st.nextToken());
			int dir = Integer.parseInt(st.nextToken());
			int level = Integer.parseInt(st.nextToken());

			list.add(dir);	// 0์„ธ๋Œ€
			map[cy][cx]=1;
			cy += dy[dir];
			cx += dx[dir];
			map[cy][cx]=1;
			
			for (int l = 1; l <= level; l++) {
				drawDragon();
			}
			list.clear();
		}
		System.out.println(countBox());
	}//end of main
	
	private static void drawDragon() {
		
		// 0: ->
		// 1: ->์—์„œ ใ…œ์„ ์ถ”๊ฐ€๋กœ ๊ทธ๋ฆฐ๋‹ค.
		// 2: ->, ใ…œ ์—์„œ <, ใ…œ๋ฅผ ์ถ”๊ฐ€๋กœ ๊ทธ๋ฆฐ๋‹ค
		// 3: ->, ใ…œ, <, ใ…œ์—์„œ <, ^, <, ใ…œ์„ ์ถ”๊ฐ€๋กœ ๊ทธ๋ฆฐ๋‹ค.
		for (int i = list.size()-1; i >= 0; i--) {
			int d = list.get(i);
			
			d = (d+1)==4?0:d+1;
			cy += dy[d];
			cx += dx[d];
		
			list.add(d);
			map[cy][cx]=1;
		}
	}//end of drawDragon
	
	private static int countBox() {
		int cnt = 0;
		for (int i = 0; i < 100; i++) {
			for (int j = 0; j < 100; j++) {
				if(map[i][j]==1 && map[i+1][j]==1 && 
						map[i][j+1]==1 & map[i+1][j+1]==1)
					cnt++;
			}
		}
		return cnt;
	}//end of countBox
}//end of class

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ