Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1941๋ฒˆ - ์†Œ๋ฌธ๋‚œ ์น ๊ณต์ฃผ (๊ณจ๋“œ3) (DFS)

๊ฐ์ž ๐Ÿฅ” 2023. 3. 4. 18:10
๋ฐ˜์‘ํ˜•

์ด๋ฒˆ์—๋„ ๋ง‰์ƒ ๊ตฌํ˜„์€ ์–ด๋ ต์ง€ ์•Š์€ DFS ๊ด€๋ จ ๋ฌธ์ œ์˜€์ง€๋งŒ, ์ƒ๊ฐํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ๋งŽ์€ ๊ธธ์„ ๊ฐ€์•ผํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ DFS, BFS์— ๋Œ€ํ•œ ๊ฐ์„ ์กฐ๊ธˆ์”ฉ ์žก์•„๊ฐ€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋„ˆ๋ฌด ๊ธฐ์˜๋‹ค!

 

โšซ๏ธ ๋ฌธ์ œ

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

 

1941๋ฒˆ: ์†Œ๋ฌธ๋‚œ ์น ๊ณต์ฃผ

์ด 25๋ช…์˜ ์—ฌํ•™์ƒ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์—ฌํ•™์ƒ๋ฐ˜์€ 5×5์˜ ์ •์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ํ˜•ํƒœ๋กœ ์ž๋ฆฌ๊ฐ€ ๋ฐฐ์น˜๋˜์—ˆ๊ณ , ์–ผ๋งˆ ์ง€๋‚˜์ง€ ์•Š์•„ ์ด๋‹ค์†œ๊ณผ ์ž„๋„์—ฐ์ด๋ผ๋Š” ๋‘ ํ•™์ƒ์ด ๋‘๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋‹ค๋ฅธ ํ•™์ƒ๋“ค์„ ํœ˜์–ด์žก๊ธฐ ์‹œ์ž‘

www.acmicpc.net

 

โšซ๏ธ ์ƒ๊ฐ์˜ ํ๋ฆ„

1๏ธโƒฃ ์ฒซ๋ฒˆ์งธ ์ƒ๊ฐ

์ผ๋‹จ ์—ฐ๊ฒฐ๋œ 7๋ช…์˜ ์นœ๊ตฌ๋“ค์„ ์ฐพ์•„์•ผํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ DFS๋ฅผ ์ด์šฉํ•ด์„œ 7๋ช…์˜ ์นœ๊ตฌ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ, ๊ทธ ์นœ๊ตฌ๋“ค์ด S์ธ์ง€ Y์ธ์ง€ ํŒ๋‹จํ•˜๊ณ , Y๊ฐ€ 4๋ช…์„ ๋„˜์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„ ํ•ด๋‹น ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•ด์ฃผ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ๋‹ค. 

๊ทธ๋ž˜์„œ ์œ„ ๊ทธ๋ฆผ์„ ์กฐ๊ธˆ ํ•ด์„ํ•ด๋ณด์ž๋ฉด, (0,0)์˜ ์œ„์น˜๋ถ€ํ„ฐ DFS๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ๋ฐฉํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ณ , ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด์„œ ์ด๋™ํ•˜๊ณ  S์™€ Y์˜ ๊ฐฏ์ˆ˜๋ฅผ ํŒ๋‹จํ•ด์ฃผ๊ณ  return๋ ๋•Œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ false์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด์„œ ๋‹ค์‹œ ๋‹ค์Œ ํƒ์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

โŒ ์ด ํ’€์ด๋กœ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ด์œ 

๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ, ํ•™์ƒ๋“ค์€ ์ „๋ถ€! ์ธ์ ‘ํ•ด ์žˆ์œผ๋ฉด๋œ๋‹ค. ์•„๋ž˜ ๋‘ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

DFS๋Š” ์ง€๊ธˆ ํƒ์ƒ‰์ค‘์ธ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํ”ผ๊ณ  ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋™ํ•˜๋ฉด ๊ทธ ์œ„์น˜์—์„œ ๋‹ค์‹œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํ•€๋‹ค. ์šฐ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ์ขŒ ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ๋˜๋Œ์•„๊ฐ€๋„ ๋˜์ง€๋งŒ, ์ด๋ฏธ ํ•œ๋ฒˆ ๊ฑฐ์ณ์˜จ ๋…ธ๋“œ๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋Œ์•„๊ฐˆ ์ˆ˜์—†๋‹ค. ๊ทธ๋ž˜์„œ DFS๋Š” ๊ฒฐ๊ตญ, ํ•œ ๋ฐฉํ–ฅ, ์—ฐ๊ฒฐ๋œ ํ•˜๋‚˜์˜ ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. (์™”๋‹ค๊ฐ€ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์—†๋‹ค.)

์™”๋‹ค๊ฐ€ ๋˜๋Œ์•„๊ฐ€๋Š” DFS๋กœ๋„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜์ง€๋งŒ, ์ด ๋ฌธ์ œ์—์„œ๋Š” ์–ด์ฐจํ”ผ ํ•œ๋ฒˆ countํ•œ ํ•™์ƒ์€ ๋˜ count๋˜์ง€ ์•Š์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— visited๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋˜๋Œ์•„๊ฐ€๊ฒŒ ๊ตฌํ˜„์ด ์–ด๋ ต๋‹ค๋Š” ํŒ๋‹จ์ด์—ˆ๋‹ค.

2๏ธโƒฃ ๋‘๋ฒˆ์งธ ์ƒ๊ฐ

๋‘๋ฒˆ์งธ๋กœ ์ƒ๊ฐํ•œ ๊ฒƒ์€, '์™„์ „ํƒ์ƒ‰'์„ ๋จผ์ € ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด, ํ•ญ์ƒ ์ž…๋ ฅ๊ฐ’์€ 5x5 ๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋Ÿผ, ์—ฌ๊ธฐ์„œ 7๋ช…์„ ๊ณจ๋ผ๋‚ด๋Š”๋ฐ์—๋Š” max๊ฐ’์ด ์ •ํ•ด์ ธ์žˆ๋‹ค. 25๊ฐœ์ค‘ 7๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” (25C7, combination) ๋งŒํผ๋งŒ ํƒ์ƒ‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์™„์ „ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ, ์กฐ๊ฑด์„ ์‚ดํŽด๋ณด๊ณ  ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๊ณ ๋ฏผํ•ด๋ดค๋‹ค. ์ผ๋‹จ,, 25๊ฐœ์—์„œ 7๊ฐœ๋ฅผ ๋ฝ‘์•„๋‚ด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 48๋งŒ๊ฐœ ์ •๋„ ๋œ๋‹ค. (๊ณ„์‚ฐ๊ธฐ ๋•กํ) ๊ทธ๋ฆฌ๊ณ  ๋ฐฑ์ค€์—์„œ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์€ 2์ดˆ. (ํŒŒ์ด์ฌ ๊ธฐ์ค€์œผ๋กœ 2์ดˆ๋ฉด 2์–ตํšŒ ๋Œ์•„๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ, ์ผ๋‹จ 48๋งŒํšŒ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„์ ์œผ๋กœ ์—ฌ์œ ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ๋‚ด ๋‡Œํ”ผ์…œ์ƒ, 100๋งŒ ์ดํ•˜๋Š” ๋ฌด์กฐ๊ฑด ์™„ํƒ์„ ๋Œ๋ ค๋„ ์ƒ๊ด€์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ์žˆ๋‹ค.)

๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ ๋…ธ๋ž€์ƒ‰ ํ˜•๊ด‘ํŒฌ ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค. ์ €๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด์ž....

๐Ÿ”– 48๋งŒ๊ฐœ ๋จผ์ € ๋งŒ๋“ค์–ด์ฃผ์ž 

๊ฐ€์žฅ ๋จผ์ € combination์„ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผํ–ˆ๋‹ค. ์Šค์œ„ํ”„ํŠธ๋Š” ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” combination ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—,,, ์˜ˆ์ „๋ถ€ํ„ฐ ์‚ด์ง! ์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ตํ˜€๋‘๊ณ  ์žˆ์—ˆ๋‹ค. (์ง€๊ธˆ๋„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ์ฐธ๊ณ ํ–ˆใ„ท.ใ… ํ—คใ…”ํ—ค  ์ฐธ๊ณ ๊ธ€ - https://inuplace.tistory.com/1189

์–ด์ฐจํ”ผ 25๊ฐœ์˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๋‹ˆ๊นŒ, 0๋ถ€ํ„ฐ 24๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ํ†ตํ•ด์„œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ˆซ์ž๋งŒ ์žˆ์–ด๋„ row์™€ column ์ˆซ์ž๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค! ๋ณต์žกํ•˜๊ฒŒ (0,0) (0,1),,, ์ด๋ ‡๊ฒŒ ์ขŒํ‘œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์กฐํ•ฉ์„ ๋งŒ๋“ค์ง€ ์•Š์•˜๋‹ค.

๐Ÿ”– ๊ทธ๋ฆฌ๊ณ  S์˜ ๊ฐœ์ˆ˜๋ฅผ ํŒ๋‹จํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ ์ƒ๊ฐ

๊ทธ๋‹ค์Œ S์˜ ๊ฐœ์ˆ˜๋ฅผ ํŒ๋‹จํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š”, combination์œผ๋กœ๋ถ€ํ„ฐ ๋„์ถœ๋œ 48๋งŒ๊ฐœ์˜ ๋ฐฐ์—ด์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ›์•„์™€์„œ, ๊ทธ ๋ฐฐ์—ด ๋‚ด๋ถ€์—์„œ ๊ฐ ์œ„์น˜์— S์™€ Y๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ์„ธ์–ด์ฃผ์—ˆ๋‹ค. S๊ฐ€ 4๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„ true๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๊ณ  Y๊ฐ€ 4๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„ False๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋„๋ก ๋งŒ๋“ค๋ฉด ๋œ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๐Ÿ”– 7๊ฐœ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ

7๊ฐœ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๋‹ค. ๋‚ด๊ฐ€ ์กฐํ•ฉ์„ ๋งŒ๋“  ๋ฐฉ๋ฒ•์ด 0๋ถ€ํ„ฐ 24๊นŒ์ง€์˜ ์ˆซ์ž๋กœ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ๊นŒ, ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ๋ชซ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๋ฌถ์–ด์„œ ๊ฐ™์€์ง€ ํŒ๋‹จํ•˜๊ณ  ์—ฐ๊ฒฐ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ๊ทผ๋ฐ,,, ์ด๋ ‡๊ฒŒ ์ž˜ ์•ˆ๋๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค.

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ BFS๋ฅผ ํ†ตํ•ด์„œ ์ธ์ ‘๋…ธ๋“œ๋ฅผ ์ฐพ์•„์ฃผ๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. BFS๊ฐ€ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์ค€๋‹ค๊ณ  ์•Œ๋ ค์ ธ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์‚ฌ์‹ค ์ƒ๊ฐํ•ด๋ณด๋ฉด, BFS๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ ค๋ณด๋ฉด, ํ˜„์žฌ ํƒ์ƒ‰์ค‘์ธ ๋…ธ๋“œ๋ž‘ ์ธ์ ‘ํ•œ ์• ๋“ค์„ ์ „๋ถ€ queue์— ๋„ฃ์–ด์ฃผ๊ณ , queue๋ฅผ ์†Œ์ง„ํ• ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค. BFS์— ๋„ฃ์–ด์ค„ arr๋Š” ๊ธธ์ด 7์งœ๋ฆฌ ๋ฐฐ์—ด์ด๊ณ , 7๊ฐœ ๋ชจ๋‘๊ฐ€ ์ธ์ ‘๋˜์–ด์žˆ์–ด์•ผํ•˜๋‹ˆ๊นŒ, ๊ฒฐ๊ตญ ๋„์ถœ๋  ๋•Œ 7๊ฐœ ๋ชจ๋‘ visited ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉด ๋ชจ๋‘ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ๋œป, ์ฆ‰ ๋ชจ๋‘ ์ธ์ ‘ํ•ด์„œ queue์— ํ•œ๋ฒˆ ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€ ๋‚˜์™“๋‹ค๋Š” ๋œป์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค!

์ด ๋ชจ๋“  ๊ฒƒ์„ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํ˜„ํ•˜๋ฉด,, ์ •๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ—คํ—ค ์žฌ๋ฐ‹๋‹ค ์ด๋Ÿฐ๋ฌธ์ œ ๋„ˆ๋ฌด!

โšซ๏ธ ์ •๋‹ต์ฝ”๋“œ

import Foundation

var location = [[String]]()
for _ in 0..<5 {
    location.append(readLine()!.map{ String($0) })
}

let dx = [-1, 1, 0, 0]
let dy = [0, 0, -1, 1]

func solution() {
    // 48๋งŒ๊ฐœ ์กฐํ•ฉ ์ƒ์„ฑ
    let combiArr = combi(arr: Array(stride(from: 0, through: 24, by: 1)), n: 7)
    var answer = 0

    for c in combiArr {
        if checkScnt(arr: c) {
            if isConnection(arr: c) {
                answer += 1
            }
        }
    }

    print(answer)
}

func checkScnt(arr: [Int]) -> Bool {
    // ๋‹ค์†œ(S)๊ฐ€ 4๋ช… ์ด์ƒ์ด๋ฉด true
    var sCnt = 0
    var yCnt = 0

    for i in 0..<7 {
        if sCnt >= 4 {
            return true
        } else if yCnt >= 4 {
            return false
        }

        let x = arr[i] / 5
        let y = arr[i] % 5
        if location[x][y] == "S" {
            sCnt += 1
        } else if location[x][y] == "Y" {
            yCnt += 1
        }
    }

    if sCnt >= 4 {
        return true
    }

    return false
}

func isConnection(arr: [Int]) -> Bool {
    var check = Array(repeating: false, count: 7) // arr์— ๋งž์ถฐ์„œ ์ธ๋ฑ์Šค๋กœ ๊ตฌ๋ณ„
    var queue = [(Int, Int)]()

    func bfs(index: Int) {
        queue.append((arr[index] / 5, arr[index] % 5))
        check[index] = true

        while !queue.isEmpty {
            let temp = queue.removeFirst()
            let x = temp.0
            let y = temp.1

            for i in 0..<4 {
                let nx = x + dx[i]
                let ny = y + dy[i]

                if nx < 0 || ny < 0 || nx >= 5 || ny >= 5 {
                    continue
                }

                if arr.contains((nx * 5) + ny), !check[arr.firstIndex(of: (nx * 5) + ny)!] {
                    check[arr.firstIndex(of: (nx * 5) + ny)!] = true
                    queue.append((nx, ny))
                }
            }
        }
    }

    bfs(index: 0)

    if check.filter({ $0 == true }).count == 7 {
        return true
    }

    return false
}

func combi(arr: [Int], n: Int) -> [[Int]] {
    var combiArr = [[Int]]()

    func dfs(index: Int, now: [Int]) {
        if now.count == n {
            combiArr.append(now)
            return
        }

        for i in index..<arr.count {
            dfs(index: i + 1, now: now + [arr[i]])
        }
    }

    dfs(index: 0, now: [])
    return combiArr
}

solution()

 

 

์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ œ ์†์— ํžŒํŠธ๊ฐ€ ์ˆจ๊ฒจ์ ธ์žˆ๋˜๊ฒŒ ํŠน์ง•์ด์—ˆ๋‹ค. ๋ฐ”๋กœ ์ž…๋ ฅ๊ฐ’์ด ํ•ญ์ƒ 25๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ!!! 

๋ฐ˜์‘ํ˜•