[BOJ] 14890.๊ฒฝ์ฌ๋ก (Python)
by ๋๋ถ๋
14890๋ฒ: ๊ฒฝ์ฌ๋ก
์ฒซ์งธ ์ค์ N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋์ด๋ 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
์ด ๋ฌธ์ ๋ NxN ํฌ๊ธฐ์ ์ง๋์์ ๊ฐ ์ ์๋ ๊ธธ์ด ๋ช ๊ฐ์ธ์ง ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
์ฌ๊ธฐ์ ๊ธธ์ ํ ํ ๋๋ ํ ์ด์ ์๋ฏธํ๋ฉฐ, ๊ธธ์ ์ด 2N๊ฐ ์กด์ฌํฉ๋๋ค.
์นธ์ ๋์ด๊ฐ ๊ฐ์์ผ ๊ธธ์ ์ง๋๊ฐ ์ ์๋๋ฐ, ๋ง์ฝ ๋์ด๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ฒฝ์ฌ๋ก๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
๊ฒฝ์ฌ๋ก ๋์ด๋ ํญ์ 1์ด๋ฉฐ, ๊ธธ์ด๋ L๋ก ์ฃผ์ด์ง๋๋ค. ๊ฒฝ์ฌ๋ก์ ๊ฐ์๋ ๋งค์ฐ ๋ง์ด ์กด์ฌํฉ๋๋ค.
๊ฒฝ์ฌ๋ก๋ ๋ฎ์ ์นธ๊ณผ ๋์ ์นธ์ ์ฐ๊ฒฐํ๋ ๋ฐ, ์ด ๋ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
- ๊ฒฝ์ฌ๋ก๋ ๋ฎ์ ์นธ์ ๋์ผ๋ฉฐ L๊ฐ์ ์ฐ์๋ ์นธ์ ๊ฒฝ์ฌ๋ก ๋ฐ๋ฅ์ด ๋ชจ๋ ์ ํด์ผํ๋ค.
- ๋ฎ์ ์นธ๊ณผ ๋์ ์นธ์ ๋์ด ์ฐจ์ด๋ 1์ด์ด์ผ ํ๋ค.
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ๋ฎ์ ์นธ์ ๋์ด๋ ๋ชจ๋ ๊ฐ์์ผ ํ๊ณ , L๊ฐ์ ์นธ์ด ์ฐ์๋์ด ์์ด์ผ ํ๋ค.
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ๊ณณ์๋ ๋ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋ค.
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋๋ค๊ฐ ๋ฒ์๊ฐ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ, ๊ฒฝ์ฌ๋ก๋ฅผ ๋๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ฒฝ์ฌ๋ก๋ฅผ ๋๋ ์กฐ๊ฑด์ ๋ง์ถฐ์ ์ฝ๋๋ฅผ ์์ฑํ์ผ๋ฉฐ, ์ด ๋ ์ ๋ ํ๋์ ๊ธธ์ ๋ํด์๋ง ๊ฒ์ฌ๋ฅผ ํ์ต๋๋ค.
๊ธธ ํ๋๋ฅผ ๊ฒ์ฌํ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ํ ํ ๋๋ ํ ์ด์ ๋ฃ์ด์ ํ์ธํ์ต๋๋ค.
์ ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# ๊ฒฝ์ฌ๋ก
import sys
# ์ง๋๊ฐ ์ ์๋ ๊ธธ์ธ์ง ํ์ธํ๋ ํจ์
# N : ๊ธธ์ ๊ธธ์ด, L : ๊ฒฝ์ฌ๋ก ๊ธธ์ด, route : ๊ธธ
def check_route(N, L, route) :
ramp = [0]*N # ๊ฒฝ์ฌ๋ก๋ฅผ ์ธ์ ๋์ง ํ์ธํ๊ธฐ ์ํ ๋ฆฌ์คํธ
for i in range(N-1) :
if route[i] != route[i+1] : # ๋์ด ์ฐจ์ด๊ฐ ์๋ ๊ฒฝ์ฐ
if abs(route[i] - route[i+1]) > 1 : # ๋์ด ์ฐจ์ด๊ฐ 1์ด ์๋ ๊ฒฝ์ฐ
return False
else : # ๋์ด ์ฐจ์ด๊ฐ 1์ธ ๊ฒฝ์ฐ
if route[i] - route[i+1] == 1 : # ๋์ ์นธ์์ ๋ฎ์ ์นธ
if i+1+L > N : return False
check = route[i+1] # ๊ฒฝ์ฌ๋ก๋ฅผ ์ธ์ธ ์ ์๋ ๋์ด์ธ์ง ํ์ธ์ฉ
for j in range(i+1, i+1+L) :
if ramp[j] or route[j] != check : return False
ramp[j] = 1
elif route[i] - route[i+1] == -1 : # ๋ฎ์ ์นธ์์ ๋์ ์นธ
if i-L < -1 : return False
check = route[i]
for j in range(i, i-L, -1) :
if ramp[j] or route[j] != check : return False
ramp[j] = 1
return True
if __name__=="__main__" :
input = sys.stdin.readline
N, L = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(N)]
cnt = 0 # ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ์ ๊ธฐ๋ก
for r in matrix : # ํ ํ์ธ
if check_route(N, L, r) : cnt += 1
for c in range(N) : # ์ด ํ์ธ
if check_route(N, L, [matrix[r][c] for r in range(N)]) : cnt += 1
print(cnt)
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15686.์นํจ๋ฐฐ๋ฌ (Python) (0) | 2021.04.22 |
---|---|
[BOJ] 17140.์ด์ฐจ์๋ฐฐ์ด๊ณผ ์ฐ์ฐ (Python) (0) | 2021.04.21 |
[BOJ] 1929.์์๊ตฌํ๊ธฐ (Python) (0) | 2021.04.19 |
[BOJ] 12110.2048(Easy) (0) | 2021.04.19 |
[BOJ] 13549.์จ๋ฐ๊ผญ์ง 3 (Python) (0) | 2021.04.18 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋