๐ ๋ฐฑ์ค 2615 - ์ค๋ชฉ
โก๏ธ ๋์ ํ์ด
IndexError
์ ๋จ๋ฝ์ฐ์ฐ์
์ ์ค์์ฑ์ ๋งค์ฐ ๋งค์ฐ ์ ๋ฐฐ์ด ๋ฌธ์ ์๋ค..(๊ทธ๋งํผ ๋ง์ด ์๋ํ๋ค..) ๊น๋จน์ง ์๊ฒ ์ ๋ต ํ์ ์ ๋ฐ๊ณ ๋ฐ๋ก ๊ธ์ ์์ฑํ๋ ์ค์ด๋ค.
์ ์ผ ์ด๋ ค์ ๋ ๋ถ๋ถ์ IndexError(๋ฒ์์ค์ )
, ์ก๋ชฉํ์
์ด๊ณ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฐ๋์
์ฐพ๊ธฐ์๋ค. ์ง๊ธ ์์ฑํ๋ ์ฝ๋๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ธ์ง ์ ํํ ๋ถ์ํ์ด์ผ ํ๋๋ฐ ๋ฏธํกํด์ ์์ฌ์ ๋ค. ํฐ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
- 19 * 19 ์ ๋ ฅ์ ๋ฐ๋๋ค.
- ๋ฐ๋์์ด ์๋ ๊ฐ
(arr[x][y]:)
์ ํ์ธํ๋ค. ํ
,์ฐํ
,์ฐ
,์ฐ์
์์๋ก ํ์ํ๋ค.- ํ์ฌ ๊ฐ๊ณผ ๋ค์ ๊ฐ์ด ์ฐ์์ผ๋ก ์๋์ง
while
๋ฌธ์ผ๋ก ํ์ธํ๋ค. - ์ก๋ชฉ ํ๋จ(ํ๋จ ์ฐธ๊ณ )์ ์งํํ๋ค.
- ์ก๋ชฉ ํ๋จ์ ์กฐ๊ฑด์ ์ง๋ฌ๋๋ฐ๋
cnt == 5
๋ฉด ์ค๋ชฉ์ผ๋ก ํ๋จํ๊ณreturn
ํ๋ค. - ์น๋ถ๊ฐ ๋์ง ์์ผ๋ฉด 0์
return
ํ๋ค.
๐ค Trial and Error
1๏ธโฃ IndexError
19๋ฒ ์ฝ๋๋ฅผ while 0 <= nx + dx[i] < n and 0 <= ny + dy[i] < n and arr[x][y] == arr[nx][ny]:
์ฒ๋ผ ์์ฑํ๋ค. ๋ฌผ๋ก IndexError
๊ฐ ๋ฐ์ํ๋๋ฐ, ๋ง์ฝ ํ์ฌ cnt = 4
์ด๊ณ ๋ค์ cnt
๋ฅผ ์
์ฐจ๋ก์ธ๋ฐ, ์ฌ๊ธฐ์ + dx[i], + dy[i]
์นธ๋งํผ ๋ ๊ฐ๋ฉด n
์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
2๏ธโฃ ๋จ๋ฝ์ฐ์ฐ์
์ฒ์์ 23๋ฒ๊ณผ 25๋ฒ ๊ฐ๊ฐ ์ฝ๋ ์์๋ฅผ ์๋ค๋ก ๋ฐ๊พธ์ด์ ์์ฑํ์๋ค.(23๋ฒ: if arr[nx][ny] == arr[nx + dx[i]][ny + dy[i]] and 0 <= nx + dx[i] < n and 0 <= ny + dy[i] < n:
, 25๋ฒ: if arr[x][y] == arr[x - dx[i]][y - dy[i]] and 0 <= x - dx[i] < n and 0 <= y - dy[i] < n:
) ์ด๋ ๊ฒ ์์ฑํ๋๊น ์ญ์ IndexError
๊ฐ ๋ฐ์ํ๋๋ฐ ๋ง์ฝ, ํ์ฌ ์ขํ arr[x][y]
๊ฐ index
๋ง์ง๋ง ์์น(arr[n][n]
)์ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๋ค์ ๋น๊ตํ ์ขํ์ธ arr[nx + dx[i]][ny + dy[i]]
๋ n
์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๊ธฐ ๋๋ฌธ์ ๋น๊ตํ ์ ์๋ค. ๋ฐ๋ผ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋, ์ ๋ค ์์๋ฅผ ๋ฐ๊พธ๋ฉด ์ ์กฐ๊ฑด์ธ 0 <= nx + dx[i] < n and 0 <= ny + dy[i] < n:
์ ๋จผ์ ๊ฑธ๋ฆฌ๊ฒ ๋๊ณ ์ดํ ๋จ๋ฝ ํ๊ฐ์ ์ํด ๋ค ์กฐ๊ฑด์ ๋น๊ตํ์ง ์๊ณ ๊ณง๋ฐ๋ก False
์ฒ๋ฆฌํ๋ค. 25๋ฒ ์ฝ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์ด์ ๊ธ์ ๋ณด์!
3๏ธโฃ ์ก๋ชฉ ํ๋จ
์ฐ์๋ ๋ฐ๋์์ด ์ก๋ชฉ์ธ์ง ํ๋ณํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค. ์ฒซ ๋ฒ์งธ๋ ์ฐ์๋ ๋ฐ๋์์ ์ ์ผ ๋ง์ง๋ง ์ขํ์ ํด๋น ์ขํ์์ ํ ์นธ(+ dx[i], + dy[i]
) ๋ ์ด๋ํ ์ขํ๊ฐ ๊ฐ์์ง ์ดํด๋ณด๊ณ , ๋ ๋ฒ์งธ๋ ์ ์ผ ์ฒ์ ์ขํ์ ํด๋น ์ขํ์์ ํ ์นธ(- dx[i], - dy[i]
) ๋ ์ด๋ํ ์ขํ๊ฐ ๊ฐ์์ง ์ดํด๋ณด๋ ๊ฒ์ด๋ค. ๋ง์ด ๋ณต์กํ ๊ฒ ๊ฐ์๋ณด์ฌ ํ๋จ์ ํ๋ฅผ ์ง์ ๊ทธ๋ ค๋ดค๋ค.
4๏ธโฃ return ์ธ์ ๊ฐ์
์น๋ถ๊ฐ ๋ฌ์ ๋ return
ํ๋ ์ธ์์ ๊ฐ์์ ์น๋ถ๊ฐ ๋์ง ์์์ ๋ return
ํ๋ ์ธ์์ ๊ฐ์๊ฐ ๋ฌ๋๋ค. ๊ทธ๋์ return
๊ณผ print()
๋ฅผ ๊ฐ๊ฐ ์ฌ์ฉํ๋ ค๋ค๊ฐ ์ฝ๋๊ฐ ๊น๋ํ์ง ์์ ๊ฒ ๊ฐ์ ํ๋๋ง return
ํ๋ ์ธ์์ ์์๋ก -1, -1
์ ๋ถ์ฌ 3๊ฐ๋ก ๋ง์ท๊ณ , 0์ return
ํ ๊ฐ์๋ 0
๋ง ์ถ๋ ฅํ๊ฒ ์์ฑํ๋ค.
๋ง์ง๋ง์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ์์ฑํ T.C
๋ฅผ ํ๋ ๊ฐ์ ธ์๋๋ฐ ๋ฌธ์ ๊ฐ ์ ํ๋ฆฐ๋ค๋ฉด ํ
์คํธํด๋ณด์. (19 * 19
๋ก ๋ง๋ค๊ธฐ ๊ท์ฐฎ์์ 6 * 6
๋ก ๋ง๋ค์๋ค.)
'''
@ input
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
0 0 0 0 0 0
2 2 2 2 2 1
@ output
2
6 1
'''
์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์ด 3์ผ์ด ๊ฑธ๋ ธ๋๋ฐ, ์ค๋ ๋ฐฐ์ ๋ ๋ด์ฉ๋ค์ ์ธ์ ๊ฐ ์จ๋จน์ ์ ์๊ฒ ์์ง ๋ง์์ผ๊ฒ ๋ค.
n = 19
arr = [list(map(int, input().split())) for _ in range(n)]
dx = [1, 1, 0, -1] # ํ(↓), ์ฐํ(โฌ), ์ฐ(โ), ์ฐ์(โฌ)
dy = [0, 1, 1, 1]
def omok():
for x in range(n):
for y in range(n):
if arr[x][y]:
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
cnt = 1
if nx < 0 or ny < 0 or nx >= n or ny >= n:
continue
while 0 <= nx < n and 0 <= ny < n and arr[x][y] == arr[nx][ny]:
cnt += 1
if cnt == 5:
if 0 <= nx + dx[i] < n and 0 <= ny + dy[i] < n and arr[nx][ny] == arr[nx + dx[i]][ny + dy[i]]: # ์ก๋ชฉ ํ์ 1
break
if 0 <= x - dx[i] < n and 0 <= y - dy[i] < n and arr[x][y] == arr[x - dx[i]][y - dy[i]]: # ์ก๋ชฉ ํ์ 2
break
return arr[x][y], x+1, y+1 # ์ก๋ชฉ์ด ์๋ ์ค๋ชฉ์ด๋ฉด return
nx += dx[i]
ny += dy[i]
return 0, -1, -1 # ์น๋ถ๊ฐ ๋์ง ์์ ๋
color, x, y = omok()
if not color:
print(color)
else:
print(color)
print(x, y)
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1009 - ๋ถ์ฐ์ฒ๋ฆฌ (2) | 2021.06.07 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 11586 - ์ง์ ๊ณต์ฃผ๋์ ๋ง๋ฒ ๊ฑฐ์ธ (0) | 2021.06.04 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2902 - KMP๋ ์ KMP์ผ๊น? (0) | 2021.06.02 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 20436 - ZOAC 3 (4) | 2021.06.01 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1244 - ์ค์์น ์ผ๊ณ ๋๊ธฐ (4) | 2021.05.31 |
๋๊ธ