[๋ฐฑ์ค/python] 1987๋ฒ : ์ํ๋ฒณ
๋ฌธ์
์ธ๋ก R์นธ, ๊ฐ๋ก C์นธ์ผ๋ก ๋ ํ ๋ชจ์์ ๋ณด๋๊ฐ ์๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ์ด ํ๋์ฉ ์ ํ ์๊ณ , ์ข์ธก ์๋จ ์นธ (1ํ 1์ด) ์๋ ๋ง์ด ๋์ฌ ์๋ค.
๋ง์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ค ์นธ ์ค์ ํ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋๋ฐ, ์๋ก ์ด๋ํ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ์ ์ง๊ธ๊น์ง ์ง๋์จ ๋ชจ๋ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ๊ณผ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ฆ, ๊ฐ์ ์ํ๋ฒณ์ด ์ ํ ์นธ์ ๋ ๋ฒ ์ง๋ ์ ์๋ค.
์ข์ธก ์๋จ์์ ์์ํด์, ๋ง์ด ์ต๋ํ ๋ช ์นธ์ ์ง๋ ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ด ์ง๋๋ ์นธ์ ์ข์ธก ์๋จ์ ์นธ๋ ํฌํจ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ R๊ณผ C๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 ≤ R,C ≤ 20) ๋์งธ ์ค๋ถํฐ R๊ฐ์ ์ค์ ๊ฑธ์ณ์ ๋ณด๋์ ์ ํ ์๋ C๊ฐ์ ๋๋ฌธ์ ์ํ๋ฒณ๋ค์ด ๋น์นธ ์์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ง์ด ์ง๋ ์ ์๋ ์ต๋์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต
import sys
input = sys.stdin.readline
R, C = map(int, input().split())
board = [list(input().strip()) for _ in range(R)]
answer = 0
tmp = [(0, 1), (0, -1), (1, 0), (-1, 0)]
stack = set([(0, 0, board[0][0])]) # set์ผ๋ก ์ํ๋ฉด ์๊ฐ์ด๊ณผ
while stack:
x, y, v = stack.pop()
answer = max(answer, len(v))
for _x, _y in tmp:
a = x+_x
b = y+_y
if 0 <= a < R and 0 <= b < C and board[a][b] not in v:
stack.add((a, b, v+board[a][b]))
print(answer)
tmp์ ์ํ์ข์ฐ๋ก ์ด๋ํ๋ ์ขํ๊ฐ์ ์ ์ฅํ๋ค.
stack์๋ setํํ๋ก ํ์ฌ ์์น์ ๋ฐฉ๋ฌธํ ์ํ๋ฒณ ๋ฌธ์์ด์ ๋ฃ๋๋ค.
์ฒ์์๋ ์์์ (0, 0)๊ณผ (0, 0) ์์น์ ์ํ๋ฒณ์ ๋ฃ๋๋ค.
stack์์ ํ๋์ฉ ๊บผ๋ด์ด ์ดํด๋ณธ๋ค.
์ฐ์ ํ์ฌ๊น์ง ๋ฐฉ๋ฌธํ ์ํ๋ฒณ ๊ธธ์ด๋ฅผ answer์ ๋น๊ตํ์ฌ ๋ ํฐ ์๋ก ๊ฐฑ์ ํ๋ค.
์ดํ ์ํ์ข์ฐ ์ขํ๊ฐ์ a์ b์ ์ ์ฅํ์ฌ
์ธ๋ฑ์ค ๋ฒ์ ์์ ๋ค์ด์ค๊ณ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๊ฒฝ์ฐ(board[a][b] not in v)
stack์ ๋ค์ ์์น์ธ (a, b)์ ํ์ฌ๊น์ง ๋ฐฉ๋ฌธํ ์ํ๋ฒณ + ํ์ฌ ์์น์ ์ํ๋ฒณ ๋ฌธ์์ด์ ๋ฃ๋๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 17779๋ฒ : ๊ฒ๋ฆฌ๋งจ๋๋ง 2 (0) | 2021.09.18 |
---|---|
[๋ฐฑ์ค/python] 7490๋ฒ : 0 ๋ง๋ค๊ธฐ (0) | 2021.09.17 |
[๋ฐฑ์ค/python] 1927๋ฒ : ์ต์ ํ (0) | 2021.09.06 |
[๋ฐฑ์ค/python] 1753๋ฒ : ์ต๋จ๊ฒฝ๋ก (0) | 2021.09.01 |
[๋ฐฑ์ค/python] 12865๋ฒ : ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2021.08.30 |