ํ๋ก๊ทธ๋๋จธ์ค - ๋ฐํํ๋ฉด ์ ๋ฆฌํ๊ธฐ
๋ฌธ์ ์ค๋ช
์ฝ๋ฉํ
์คํธ๋ฅผ ์ค๋นํ๋ ๋จธ์ฑ์ด๋ ํ๋ก๊ทธ๋๋จธ์ค์์ ๋ฌธ์ ๋ฅผ ํ๊ณ ๋์ค์ ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ ค๊ณ ์์ฑํ ์ฝ๋๋ฅผ ์ปดํจํฐ ๋ฐํํ๋ฉด์ ์๋ฌด ์์น์๋ ์ ์ฅํด ๋ก๋๋ค. ์ ์ฅํ ์ฝ๋๊ฐ ๋ง์์ง๋ฉด์ ๋จธ์ฑ์ด๋ ๋ณธ์ธ์ ์ปดํจํฐ ๋ฐํํ๋ฉด์ด ๋๋ฌด ์ง์ ๋ถํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ์ค์์ ์์ฑํ๋ ์ฝ๋๋ ๊ทธ ๋ฌธ์ ์ ๊ฐ์ ๋ค์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฅํด ๋ ํ์ผ๋ค์ ์ ๋ถ ์ญ์ ํ๊ธฐ๋ก ํ์ต๋๋ค.
์ปดํจํฐ ๋ฐํํ๋ฉด์ ๊ฐ ์นธ์ด ์ ์ฌ๊ฐํ์ธ ๊ฒฉ์ํ์
๋๋ค. ์ด๋ ์ปดํจํฐ ๋ฐํํ๋ฉด์ ์ํ๋ฅผ ๋ํ๋ธ ๋ฌธ์์ด ๋ฐฐ์ด wallpaper
๊ฐ ์ฃผ์ด์ง๋๋ค. ํ์ผ๋ค์ ๋ฐํํ๋ฉด์ ๊ฒฉ์์นธ์ ์์นํ๊ณ ๋ฐํํ๋ฉด์ ๊ฒฉ์์ ๋ค์ ๋ฐํํ๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ ์๋ฅผ (0, 0)์ผ๋ก ์์ํด (์ธ๋ก ์ขํ, ๊ฐ๋ก ์ขํ)๋ก ํํํฉ๋๋ค. ๋น์นธ์ ".", ํ์ผ์ด ์๋ ์นธ์ "#"์ ๊ฐ์ ๊ฐ์ง๋๋ค. ๋๋๊ทธ๋ฅผ ํ๋ฉด ํ์ผ๋ค์ ์ ํํ ์ ์๊ณ , ์ ํ๋ ํ์ผ๋ค์ ์ญ์ ํ ์ ์์ต๋๋ค. ๋จธ์ฑ์ด๋ ์ต์ํ์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ ํ ๋ฒ์ ๋๋๊ทธ๋ก ๋ชจ๋ ํ์ผ์ ์ ํํด์ ํ ๋ฒ์ ์ง์ฐ๋ ค๊ณ ํ๋ฉฐ ๋๋๊ทธ๋ก ํ์ผ๋ค์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋๊ทธ๋ ๋ฐํํ๋ฉด์ ๊ฒฉ์์ S(lux
, luy
)๋ฅผ ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ผ๋ก ํด๋ฆญํ ์ํ๋ก ๊ฒฉ์์ E(rdx
, rdy
)๋ก ์ด๋ํ ๋ค ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋ผ๋ ํ๋์
๋๋ค. ์ด๋, "์ S์์ ์ E๋ก ๋๋๊ทธํ๋ค"๊ณ ํํํ๊ณ ์ S์ ์ E๋ฅผ ๊ฐ๊ฐ ๋๋๊ทธ์ ์์์ , ๋์ ์ด๋ผ๊ณ ํํํฉ๋๋ค.
์ S(lux
, luy
)์์ ์ E(rdx
, rdy
)๋ก ๋๋๊ทธ๋ฅผ ํ ๋, "๋๋๊ทธ ํ ๊ฑฐ๋ฆฌ"๋ |rdx
- lux
| + |rdy
- luy
|๋ก ์ ์ํฉ๋๋ค.
์ S์์ ์ E๋ก ๋๋๊ทธ๋ฅผ ํ๋ฉด ๋ฐํํ๋ฉด์์ ๋ ๊ฒฉ์์ ์ ๊ฐ๊ฐ ์ผ์ชฝ ์, ์ค๋ฅธ์ชฝ ์๋๋ก ํ๋ ์ง์ฌ๊ฐํ ๋ด๋ถ์ ์๋ ๋ชจ๋ ํ์ผ์ด ์ ํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด wallpaper
= [".#...", "..#..", "...#."]์ธ ๋ฐํํ๋ฉด์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฌํ ๋ฐํํ๋ฉด์์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด S(0, 1)์์ E(3, 4)๋ก ๋๋๊ทธํ๋ฉด ์ธ ๊ฐ์ ํ์ผ์ด ๋ชจ๋ ์ ํ๋๋ฏ๋ก ๋๋๊ทธ ํ ๊ฑฐ๋ฆฌ (3 - 0) + (4 - 1) = 6์ ์ต์๊ฐ์ผ๋ก ๋ชจ๋ ํ์ผ์ ์ ํ ๊ฐ๋ฅํฉ๋๋ค.
(0, 0)์์ (3, 5)๋ก ๋๋๊ทธํด๋ ๋ชจ๋ ํ์ผ์ ์ ํํ ์ ์์ง๋ง ์ด๋ ๋๋๊ทธ ํ ๊ฑฐ๋ฆฌ๋ (3 - 0) + (5 - 0) = 8์ด๊ณ ์ด์ ์ ๋ฐฉ๋ฒ๋ณด๋ค ๊ฑฐ๋ฆฌ๊ฐ ๋์ด๋ฉ๋๋ค.
๋จธ์ฑ์ด์ ์ปดํจํฐ ๋ฐํํ๋ฉด์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด wallpaper
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ๋ฐํํ๋ฉด์ ํ์ผ๋ค์ ํ ๋ฒ์ ์ญ์ ํ๊ธฐ ์ํด ์ต์ํ์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ ๋๋๊ทธ์ ์์์ ๊ณผ ๋์ ์ ๋ด์ ์ ์ ๋ฐฐ์ด์ returnํ๋ solution
ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ๋๋๊ทธ์ ์์์ ์ด (lux
, luy
), ๋์ ์ด (rdx
, rdy
)๋ผ๋ฉด ์ ์ ๋ฐฐ์ด [lux
, luy
, rdx
, rdy
]๋ฅผ returnํ๋ฉด ๋ฉ๋๋ค.
์ ํ์ฌํญ
- 1 โค
wallpaper
์ ๊ธธ์ด โค 50 - 1 โค
wallpaper[i]
์ ๊ธธ์ด โค 50
wallpaper
์ ๋ชจ๋ ์์์ ๊ธธ์ด๋ ๋์ผํฉ๋๋ค.
wallpaper[i][j]
๋ ๋ฐํํ๋ฉด์์ i + 1
ํ j + 1
์ด์ ํด๋นํ๋ ์นธ์ ์ํ๋ฅผ ๋ํ๋
๋๋ค.
wallpaper[i][j]
๋ "#" ๋๋ "."์ ๊ฐ๋ง ๊ฐ์ง๋๋ค.
- ๋ฐํํ๋ฉด์๋ ์ ์ด๋ ํ๋์ ํ์ผ์ด ์์ต๋๋ค.
- ๋๋๊ทธ ์์์ (
lux
, luy
)์ ๋์ (rdx
, rdy
)๋ lux
< rdx
, luy
< rdy
๋ฅผ ๋ง์กฑํด์ผ ํฉ๋๋ค.
์
์ถ๋ ฅ ์
wallpaper |
result |
[".#...", "..#..", "...#."] |
[0, 1, 3, 4] |
["..........", ".....#....", "......##..", "...##.....", "....#....."] |
[1, 3, 5, 8] |
[".##...##.", "#..#.#..#", "#...#...#", ".#.....#.", "..#...#..", "...#.#...", "....#...."] |
[0, 0, 7, 9] |
["..", "#."] |
[1, 0, 2, 1] |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
- ๋ฌธ์ ์ค๋ช
์ ์์์ ๊ฐ์ ์์ ์
๋๋ค. (0, 1)์์ (3, 4)๋ก ๋๋๊ทธ ํ๋ฉด ๋ชจ๋ ํ์ผ์ ์ ํํ ์ ์๊ณ ๋๋๊ทธ ํ ๊ฑฐ๋ฆฌ๋ 6์ด์๊ณ , 6๋ณด๋ค ์ ์ ๊ฑฐ๋ฆฌ๋ก ๋ชจ๋ ํ์ผ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๋ฐ๋ผ์ [0, 1, 3, 4]๋ฅผ returnํฉ๋๋ค.
์
์ถ๋ ฅ ์ #2
์์ 2๋ฒ์ ๋ฐํํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(1, 3)์์ (5, 8)๋ก ๋๋๊ทธํ๋ฉด ๋ชจ๋ ํ์ผ์ ์ ํํ ์ ์๊ณ ์ด๋ณด๋ค ์ ์ ์ด๋๊ฑฐ๋ฆฌ๋ก ๋ชจ๋ ํ์ผ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฅ ์ ์ ์ด๋์ ๋๋๊ทธ๋ก ๋ชจ๋ ํ์ผ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ธ [1, 3, 5, 8]์ returnํฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
์์ 3๋ฒ์ ๋ฐํํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ชจ๋ ํ์ผ์ ์ ํํ๊ธฐ ์ํด์ ๋ฐํํ๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ ์ (0, 0)์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋ (7, 9)๋ก ๋๋๊ทธ ํด์ผ๋ง ํฉ๋๋ค. ๋ฐ๋ผ์ [0, 0, 7, 9]๋ฅผ returnํฉ๋๋ค.
์
์ถ๋ ฅ ์ #4
์์ 4๋ฒ์ ๋ฐํํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ด 2ํ 1์ด์๋ง ์์ด์ฝ์ด ์์ต๋๋ค.
์ด๋ฅผ ๋๋๊ทธ๋ก ์ ํํ๊ธฐ ์ํด์๋ ๊ทธ ์นธ์ ์ผ์ชฝ ์ (1, 0)์์ ์ค๋ฅธ์ชฝ ์๋ (2, 1)๋ก ๋๋๊ทธ ํ๋ฉด ๋ฉ๋๋ค. (1, 0)์์ (2, 2)๋ก ๋๋๊ทธ ํด๋ ์์ด์ฝ์ ์ ํํ ์ ์์ง๋ง ์ด์ ๋ณด๋ค ์ด๋๊ฑฐ๋ฆฌ๊ฐ ๋์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ [1, 0, 2, 1]์ returnํฉ๋๋ค.
์๋ง ํ
์คํธ๊ฐ ํ๋ก๊ทธ๋๋จธ์ค์์ ์งํ๋๋ค๊ธธ๋ ๋ง ์ข ๋ณด๋ ค๊ณ ๋๋ฌ์์ต๋๋ค.
์ด๋ ค์ธ ๊ฒ ์๋ ๊ฐ๋จํ ๋ฆฌ์คํธ ํ์ฉ ๋ฌธ์ ์
๋๋ค.
wallpaper์์ #์ด ๊ฐ์ฅ ๋นจ๋ฆฌ ๋์ค๋ ์ธ๋ฑ์ค๊ฐ ์ฒซ๋ฒ์งธ x, ๊ฐ์ฅ ๋์ค์ ๋์ค๋ ์ธ๋ฑ์ค๊ฐ ๋๋ฒ์งธ x, wallpaper์ ์์๋ค ์ค์์ #์ด ๊ฐ์ฅ ๋น ๋ฅธ ์์น์ ์๋ ์ธ๋ฑ์ค๊ฐ ์ฒซ๋ฒ์งธ y, ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฅ ๋์ค์ ๋์ค๋ ์ธ๋ฑ์ค๊ฐ ๋๋ฒ์งธ y๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
from collections import deque
def solution(wallpaper):
x = []
y = []
sum = 0
deque ํ๋ import ํ๊ณ ์์ํ๊ฒ ์ต๋๋ค.
wallpaper = deque(wallpaper)
while wallpaper:
tmp = wallpaper.popleft()
if '#' in tmp:
x.append(sum)
popleft๋ฅผ ํตํด ๊ฐ๋ณ ์์๋ง๋ค ์ ๊ทผํ๊ณ
์์ ์ธ๊ธํ๋๋ก wallpaper์ ์์๋ค์ค์ #์ด ์๋ค๋ฉด sum๊ฐ์ ํ์ฉํด์ ํด๋น ์ธ๋ฑ์ค๋ฅผ x ๋ฆฌ์คํธ์ ์น ๋ค ๊ธฐ๋กํฉ๋๋ค.
for values in tmp:
if values == '#':
y.append(sum2)
sum2 += 1
sum += 1
๊ฐ๋ณ ์์ ์์ #์ด ์กด์ฌํ๋ค๋ฉด ํด๋น ์์น๋ฅผ y๋ฆฌ์คํธ์ ์น ๋ค ๊ธฐ๋กํฉ๋๋ค.
return [min(x),min(y),max(x)+1,max(y)+1]
๋ง์ง๋ง์ผ๋ก ๊ฐ return ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
ํ๋ก๊ทธ๋๋จธ์ค - ๋จ์ด ๋ณํ
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ ๊ท์น์ ์ด์ฉํ์ฌ begin์์ target์ผ๋ก ๋ณํํ๋ ๊ฐ์ฅ ์งง์ ๋ณํ ๊ณผ์ ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
1. ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์ ์์ต๋๋ค.
2. words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด begin์ด "hit", target๊ฐ "cog", words๊ฐ ["hot","dot","dog","lot","log","cog"]๋ผ๋ฉด "hit" -> "hot" -> "dot" -> "dog" -> "cog"์ ๊ฐ์ด 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ณํํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต์ ๋ช ๋จ๊ณ์ ๊ณผ์ ์ ๊ฑฐ์ณ begin์ target์ผ๋ก ๋ณํํ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๊ฐ ๋จ์ด๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๊ฐ ๋จ์ด์ ๊ธธ์ด๋ 3 ์ด์ 10 ์ดํ์ด๋ฉฐ ๋ชจ๋ ๋จ์ด์ ๊ธธ์ด๋ ๊ฐ์ต๋๋ค.
- words์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋จ์ด๊ฐ ์์ผ๋ฉฐ ์ค๋ณต๋๋ ๋จ์ด๋ ์์ต๋๋ค.
- begin๊ณผ target์ ๊ฐ์ง ์์ต๋๋ค.
- ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ์๋ 0๋ฅผ return ํฉ๋๋ค.
์
์ถ๋ ฅ ์
begin |
target |
words |
return |
"hit" |
"cog" |
["hot", "dot", "dog", "lot", "log", "cog"] |
4 |
"hit" |
"cog" |
["hot", "dot", "dog", "lot", "log"] |
0 |
์
์ถ๋ ฅ ์ ์ค๋ช
์์ #1
๋ฌธ์ ์ ๋์จ ์์ ๊ฐ์ต๋๋ค.
์์ #2
target์ธ "cog"๋ words ์์ ์๊ธฐ ๋๋ฌธ์ ๋ณํํ ์ ์์ต๋๋ค.
def solution(begin, target, words):
global ans
words = list(sorted(words))
์ผ๋จ ์ ๋ ฌํ ๊ฐ๊ณผ ์ ๋ ฌํ์ง ์์ ๊ฐ์ด ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ ๋จ์ด ๋ฆฌ์คํธ ์ ๋ ฌ๋ถํฐ ํด์ค์๋ค.
begin: hit target: cog words: [hot, dot, dog, lot, log, cog] return : 4 << ์์ 1๋ฒ
begin: hit target: cog words: [cog, log, lot, dog, dot, hot] return : 4
์ ๊ฐ์ ๊ฒฝ์ฐ์์.
def dfs(begin):
global ans
if begin in words:
visited[words.index(begin)] = 1
DFS ์์ฑ์ ์์ํฉ๋๋ค.
ํ์ฌ ํ์์ค์ธ ๋จ์ด๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค์๋ค.
sum = 0
for k in range(len(begin)):
if begin[k] != target[k]:
sum += 1
if sum == 1:
return ans
ํ์ฌ ํ์์ค์ธ ๋จ์ด์ ํ๊ฒ ๋จ์ด๊ฐ ๋ฌธ์ 1๊ฐ ์ฐจ์ด๋ก ํ๋ฆฌ๋ค๋ฉด ํ๊ฒ ๋จ์ด๋ก ๊ฐ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ์ฌ๊ท๋ฅผ ๋๋ด์ค์๋ค.
for i in range(len(words)):
sum2 = 0
for j in range(len(words[i])):
if words[i][j] != begin[j]:
sum2 += 1
if sum2 == 1 and not visited[i]:
print(words[i])
ans += 1
dfs(words[i])
return ans
words ๋ฆฌ์คํธ์์ ํ๋์ฉ ๊บผ๋ด์ ๋ง์ฝ ํ์ฌ ํ์์ค์ธ ๋จ์ดํ๊ณ ๋ฌธ์ 1๊ฐ ์ฐจ์ด๋ก ํ๋ฆฐ ๋จ์ด๊ฐ ์๋ค๋ฉด ํด๋น ๋จ์ด๋ฅผ ํ์์ ๋ฃ์ด ์ฌ๊ท๋ฅผ ๋๋ ค์ค์๋ค. ์๋จ ์ฝ๋์์ ํ์ผ ๋จ์ด๋ก ๊ฐ๋ ๊ฒ์ด ์ฆ๋ช
๋์๋ค๋ฉด(dfs(words[i]) ์๋ ๋ถ๋ถ) ans๋ฅผ return ํ์ฌ ํจ์๋ฅผ ๋๋ด์ฃผ๋๋ก ํฉ์๋ค.
ans = 1
visited = [0] * len(words)
if target not in words:
return 0
else:
return dfs(begin)
target์ด ๋ฆฌ์คํธ ์์ ์์ผ๋ฉด ํ๊ฒ๋จ์ด๋ฅผ ์์ ๋ง๋ค ์ ์๋ ๊ฒ์ด๋ฏ๋ก 0์ return ํ๊ณ ์๋๋ผ๋ฉด dfs(begin)์์ ๋์จ ans๊ฐ์ return ํ๋ฉด ํ๊ฒ๋จ์ด๊น์ง ๊ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ๋จ์ด ์ ์ถ๋ ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฑ๊ตฃ๊ธธ
10์ต์ด ๋๋ ์๋ก ๋๋๋ผ๋ ๊ฒ์ ๋ณด์๋ง์ ์์์ต๋๋ค.
๋ค, DP ๋ฌธ์ ์
๋๋ค.
๋ฌผ์
๋ฉ์ด๋ก๋ ํตํ์ด ๋ถ๊ฐํ๋ฉฐ ์ง์์ ํ๊ต๊น์ง ๊ฐ๋ ์ต์ ์ ๊ฐ์ ๋์ถํ๋ ๋ฌธ์ ์
๋๋ค.
๋ถ์
์ ๋ DP๋ฌธ์ ๋ ๋ถ์์ ์ํ๋ฉด ํญ์ ํธ๋ ๋ฐ ๋์ด๋๊ฐ ์๋๋ผ๊ณ ์.
ํด๋น ๋ฌธ์ ๋ ์์ ์ด ํ๋ ์์ต๋๋ค. ๋ฐ๋ก ๋ฌผ์
๋ฉ์ด๊ฐ 1์ด/1ํ์ ์๊ธฐ๋ ๊ฒฝ์ฐ์
๋๋ค.
https://velog.io/@ghost_dog/%EA%B3%B5%EB%B6%80-2024.02.15-%EC%BD%94%EB%94%A9-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4
์ 1ํ/1์ด์ ์ดํด๊ฐ ์๊ฐ์๋ฉด ์ด ๊ฒ์๋ฌผ ํ๋ฒ ์ฝ์ด๋ณด์๋ฉด ๋์๋์ค ๊ฒ๋๋ค.
์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํด 1ํ๊ณผ 1์ด์ ์ ๋ถ 1๋ก ์ด๊ธฐํ ์ํค๊ณ ์์ต๋๋ค.
๊ทผ๋ฐ ์ด๋ผ? ๋ฌผ์
๋ฉ์ด๊ฐ 1ํ๊ณผ 1์ด์ ์๊ฒผ์ต๋๋ค. ๊ทธ๋ผ ์ด ์ดํ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๊น์?
์ ๋ต์ ์ฅ์ ๋ฌผ์ด ์๊ธด ์ดํ์ 1ํ ๋๋ 1์ด์ ๋ค 0์ผ๋ก ์ด๊ธฐํํด์ผ ํ๋ค ์
๋๋ค.
์๋ํ๋ฉด ์ฅ์ ๋ฌผ์ด ์๊ธด ์ดํ์ ๊ณต๊ฐ์ ์ด์ฐจํผ ์ค๋ฅธ์ชฝ ๋๋ ํ๊ฐ๋ง ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐฉ๋ฌธ์ ํด๋ด์ผ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐ ์์ด ์ ํ ๋ฉ๋ฆฌํธ๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. (ํ๊ต๊ฐ ๋งจ ์๋ ์ค๋ฅธ์ชฝ์ ์์ผ๋๊น)
์ฝ๋ฉ
ํด๋น ๋ด์ฉ์ ์๊ฐํ๋ฉฐ ์ฝ๋ฉ์ ํด๋ด
์๋ค.
def solution(m, n, puddles):
graph = [[0]*m for _ in range(n)]
for a in range(len(graph[0])):
if [a+1,1] not in puddles:
graph[0][a] = 1
else:
break
for b in range(len(graph)):
if [1,b+1] not in puddles:
graph[b][0] = 1
else:
break
ํ,์ด,๋ฌผ์
๋ฉ์ด ์์น๋ฅผ ๋ฐ๊ณ ํ์ด ํฌ๊ธฐ๋งํผ์ ์์๊ฐ ์ ๋ถ 0์ธ ๊ทธ๋ํ๋ฅผ ์์ฑํด์ค์๋ค.
๋ง์ฝ ์
๋ฉ์ด๊ฐ ์๋ 1ํ/1์ด์ด๋ผ๋ฉด ํด๋น ์ธ๋ฑ์ค๋ 1๋ก ์ด๊ธฐํํด์ฃผ๊ณ
ํ์ด ์ธ๋ฑ์ค ๊ฐ 1๋ก ์ด๊ธฐํ์ค์ 1ํ/1์ด ์๋ฆฌ์ ์
๋ฉ์ด๊ฐ ๋ฐ์ํ๋ค! ํ๋ฉด break๋ก ๋์์ ์๋ ๊ฐ์ธ 0์ผ๋ก ๋
๋ก์๋ค.
for i in range(len(graph)):
for j in range(len(graph[0])):
if i==0 or j==0:
continue
์ด์ DP๋ฅผ ๋๋ฆด ์ค๋น๋ฅผ ํฉ์๋ค.
๊ฐ ์ธ๋ฑ์ค๋ง๋ค ํ์์ ํ๋ฉด์ ๋ง์ฝ 1ํ ๋๋ 1์ด์ ์ ๊ทผํ๋ค๋ฉด ์ ํ์์ ์ํ ์ด๊ธฐ๊ฐ์ด๋ฏ๋ก ๊ฑด๋ค์ง ๋ง๊ณ continue๋ฅผ ํด์ค์๋ค. (์ด์ฐจํผ 1ํ ๋๋ 1์ด์ ๊ฐ๋ ๊ฒฝ์ฐ์ ์๊ฐ 1๊ฐ์ง๋ฐ์ ์์ผ๋ฏ๋ก)
elif [j+1,i+1] in puddles:
continue
์
๋ฉ์ด๋ผ๋ฉด ๊ฑด๋ค์ง ๋ง๊ณ continue ํด์ค๋๋ค. ์ด๋ฌ๋ฉด ์ ํ์ ์ ์ฉ์ด ์๋์ด ์ผ์ชฝ+์์ชฝ ์ด์ ์์น ์ต๋จ๊ฑฐ๋ฆฌ ์ ํ์์ ์ฌ์ฉํ ๋ ์ด์ ์์น์ ์
๋ฉ์ด๋ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ์ด ์์ ์๋ ํจ๊ณผ๋ฅผ ์ค๋๋ค.
else:
graph[i][j] = graph[i-1][j] + graph[i][j-1]
๋ง์ง๋ง์ผ๋ก ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๋ ์ ํ์ ์๊ธฐ์์ ์ต๋จ๊ฑฐ๋ฆฌ = ์์ธ๋ฑ์ค ์ต๋จ๊ฑฐ๋ฆฌ + ์ผ์ชฝ์ธ๋ฑ์ค ์ต๋จ๊ฑฐ๋ฆฌ
๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋ฉ๋๋ค.
return graph[n-1][m-1]%1000000007
์ถ๋ ฅ์ DP ์ด๊ณผ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด 10์ต์ธ๊ฐ? ๋ฅผ ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ผ๊ณ ๋ฌธ์ ์ ๋ช
์๋์ด์์ต๋๋ค.
๋ฌธ์ ์ทจ์ง๋ ์ข์๋ฐ ์
๋ฉ์ด ํ ์ด์ด ๋ค๋ฐ๊ปด์ ๋ค์ด๊ฐ๋ ๋ฑ ์ข ๋ฏธํกํ ๋ถ๋ถ์ด ์กด์ฌํ๋ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.