๐ ๋ฌธ์
ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด ์ฑ์ฐ๋ ์ค๋๋ ํผ๋ฆฌ๋ฅผ ๋ถ๋ค.
์ฑ์ฐ๊ฐ ํผ๋ฆฌ๋ฅผ ๋ถ ๋๋ฉด ์๊ณผ์ผ ํ์๋ค์ ์๊ธฐ๋ ๋ชจ๋ฅด๊ฒ ์ฑ์ฐ๊ฐ ์ ํด๋์ ๋ฐฉํฅ๋๋ก ์์ง์ด๊ธฐ ์์ํ๋ค. ์ฑ์ฐ๊ฐ ์ ํด๋์ ๋ฐฉํฅ์ ์ด 4๊ฐ์ง๋ก U, D, L, R์ด๊ณ ๊ฐ๊ฐ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ฒ ํ๋ค.
์ด๋ฅผ ์ง์ผ๋ณด๋ ์ฌํ์ด๋ ๋ ์ด์ ์์ง์ด๊ธฐ ํ๋ค์ดํ๋ ์๊ณผ์ผ ํ์๋ค์ ์งํค๊ธฐ ์ํด ํน์ ์ง์ ์ ‘SAFE ZONE’ ์ด๋ผ๋ ์ต์ฒจ๋จ ๋ฐฉ์ ์์ค์ ๋ง๋ค์ด ํ์๋ค์ด ์ฑ์ฐ์ ํผ๋ฆฌ ์๋ฆฌ๋ฅผ ๋ฃ์ง ๋ชปํ๊ฒ ํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง ์์ฐ์ด ๋๋ํ์ง ์์ ์ฌํ์ด๋ ์ฑ์ฐ๊ฐ ์ค์ ํด ๋์ ๋ฐฉํฅ์ ๋ถ์ํด์ ์ต์ ๊ฐ์์ ‘SAFE ZONE’์ ๋ง๋ค๋ ค ํ๋ค.
์ฑ์ฐ๊ฐ ์ค์ ํ ๋ฐฉํฅ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋ ์ฌํ์ด๋ฅผ ๋์์ ์๊ณผ์ผ ํ์๋ค์ด ์ง๋ ์ด๋ ๊ตฌ์ญ์ ์๋๋ผ๋ ์ฑ์ฐ๊ฐ ํผ๋ฆฌ๋ฅผ ๋ถ ๋ ‘SAFE ZONE’์ ๋ค์ด๊ฐ ์ ์๊ฒ ํ๋ ‘SAFE ZONE’์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์ง๋์ ํ์ ์๋ฅผ ๋ํ๋ด๋ N(1 ≤ N ≤ 1,000)๊ณผ ์ง๋์ ์ด์ ์๋ฅผ ๋ํ๋ด๋ M(1 ≤ M ≤ 1,000)์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ๊ธธ์ด๊ฐ M์ธ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค.
์ง๋ ๋ฐ์ผ๋ก ๋๊ฐ๋ ๋ฐฉํฅ์ ์ ๋ ฅ์ ์ฃผ์ด์ง์ง ์๋๋ค.
๐์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ‘SAFE ZONE’์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
๋ณด๋์ ์ ํ์ง U, D, L, R๋ก ํ์ํ๋ ์ด๋ ์ธ์ดํด์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
U,D,L,R์ ํค๊ฐ์ผ๋ก ๋ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๋ฐ๋ก ์ด๋ ๋ฐฉํฅ์ผ๋ก ๋ณ๊ฒฝํ์๊ณ , ์ด์ ์ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๊ณณ์ ์ฐพ์ DFS๋ฅผ ํ์๋ค. ๊ทธ ์ด์ ์ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๊ณณ์ด ํ๋์ ์ฌ์ดํด๋ก ํฉ์ณ์ง ์ ์๋ ๊ณณ์ด๋ผ๋ฉด ์นด์ดํธ๋ฅผ ํ์ง ์์๊ณ , ์๋ก์ด ์ฌ์ดํด์ด๋ฉด ์นด์ดํธ๋ฅผ ํด์ฃผ์๋ค.
๋ฌด์จ ๋ง์ด๋ํ๋ฉด,,
3 3
RDD
ULD
ULL
์์ ๊ฐ์ ์์ ๊ฐ ์๋ค.
์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ ์ฐพ๊ธฐ ๋๋ฌธ์, ์ ์ผ ์ฒ์์ ํ์ํ๊ฒ ๋๋ ๊ณณ์ 0,0 ์ฆ R์ด๋ค.
์ฌ๊ธฐ์ ํ์์ ์์ํ๋ฉด
์ด๋ฐ ์์ผ๋ก ํ๋ฒ ํ์์ ํ๊ฒ ๋๋ค. (์ญ ใท ๋ชจ์)
๊ทธ๋ฆฌ๊ณ ๋ค์์ผ๋ก ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ 0,2 ์ฆ D ์ด๋ค.
์ฌ๊ธฐ์ ๋ค์ ํ์์ ํ๋ฉด
์ด๋ ๊ฒ ํ์์ ํ๋ค.
์ฌ์ค ๋๊ฐ ๋ชจ๋ ํ ์ฌ์ดํด์ด๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ๋ง ๋ฐฉ๋ฌธํ๊ธฐ ๋๋ฌธ์ 0,1 ์ง์ ์ ํ์์ ๋ฉ์ท๋ค. ์ด ๋๊ฐ๋ฅผ ํ๋์ ์นด์ดํธ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค. ํ์์ ๋ฉ์ท์ ๋ ๋ง์ง๋ง ๋ฐฉ๋ฌธ์์น๊ฐ ์ด์ ํ์์์ ๋ฐฉ๋ฌธํ ๋ถ๋ถ์ด๋ฉด ํ ์ฌ์ดํด๋ก ์ด์ ์ ์๊ธฐ ๋๋ฌธ์ ์นด์ดํธ ํ์ง ์์๊ณ , ํ์ฌ ํ์์์ ๋ฐฉ๋ฌธํ ๊ณณ์ด๋ผ๋ฉด ์๋ก์ด ์ฌ์ดํด์ด๊ธฐ ๋๋ฌธ์ ์นด์ดํธ ํด์ฃผ์๋ค.
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import sys input = sys.stdin.readline d = {"U":[-1,0], "D":[1,0], "R":[0,1], "L":[0,-1]} def search(y, x, idx): while not visited[y][x]: visited[y][x] = idx y,x = y+d[board[y][x]][0], x+d[board[y][x]][1] if visited[y][x] == idx: return 1 return 0 n,m = map(int,input().split()) board = [list(map(str,input().rstrip())) for _ in range(n)] visited = [[0]*m for _ in range(n)] ans = 0 idx = 1 for i in range(n): for j in range(m): if not visited[i][j]: ans += search(i,j,idx) idx += 1 print(ans) | cs |
๐ญ ์ํ์ฐฉ์ค
์ฒ์์ ํ๋ ธ๋ ์ด์ ๋ ์์ ์ค๋ช ํ ๊ฐ์ ์ฌ์ดํด์ ์ฌ๋ฌ๋ฒ ์นด์ดํธํด์คฌ๊ธฐ ๋๋ฌธ์ด์๋ค.
๐ ๋ฌธ์ ๋งํฌ ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋ฐฑ์ค ๋๋ค ๋ํ์ค (0) | 2023.05.09 |
---|---|
[๋ฐฑ์ค] 23291๋ฒ: ์ดํญ ์ ๋ฆฌ (0) | 2023.04.02 |
[๋ฐฑ์ค] 1766๋ฒ: ๋ฌธ์ ์ง (0) | 2023.01.13 |
[๋ฐฑ์ค] 1719๋ฒ: ํ๋ฐฐ - ํ์ด์ฌ (0) | 2022.12.21 |
[๋ฐฑ์ค] 2133๋ฒ ํ์ผ ์ฑ์ฐ๊ธฐ - ํ์ด์ฌ, ์๋ฐ (0) | 2022.12.20 |