โ๋ฌธ์
https://www.acmicpc.net/problem/14890
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 109544 KB, ์๊ฐ: 92 ms
๋ถ๋ฅ
๊ตฌํ
๋ฌธ์ ์ค๋ช
ํฌ๊ธฐ๊ฐ N×N์ธ ์ง๋๊ฐ ์๋ค. ์ง๋์ ๊ฐ ์นธ์๋ ๊ทธ ๊ณณ์ ๋์ด๊ฐ ์ ํ์ ธ ์๋ค.
์ค๋์ ์ด ์ง๋์์ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ด ๋ช ๊ฐ ์๋์ง ์์๋ณด๋ ค๊ณ ํ๋ค. ๊ธธ์ด๋ ํ ํ ๋๋ ํ ์ด ์ ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ, ํ์ชฝ ๋์์ ๋ค๋ฅธ์ชฝ ๋๊น์ง ์ง๋๊ฐ๋ ๊ฒ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ N=6์ธ ๊ฒฝ์ฐ ์ง๋๋ฅผ ์ดํด๋ณด์.

์ด๋, ๊ธธ์ ์ด 2N๊ฐ๊ฐ ์์ผ๋ฉฐ, ์๋์ ๊ฐ๋ค.

๊ธธ์ ์ง๋๊ฐ ์ ์์ผ๋ ค๋ฉด ๊ธธ์ ์ํ ๋ชจ๋ ์นธ์ ๋์ด๊ฐ ๋ชจ๋ ๊ฐ์์ผ ํ๋ค. ๋๋, ๊ฒฝ์ฌ๋ก๋ฅผ ๋์์ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ๋ง๋ค ์ ์๋ค. ๊ฒฝ์ฌ๋ก๋ ๋์ด๊ฐ ํญ์ 1์ด๋ฉฐ, ๊ธธ์ด๋ L์ด๋ค. ๋, ๊ฐ์๋ ๋งค์ฐ ๋ง์ ๋ถ์กฑํ ์ผ์ด ์๋ค. ๊ฒฝ์ฌ๋ก๋ ๋ฎ์ ์นธ๊ณผ ๋์ ์นธ์ ์ฐ๊ฒฐํ๋ฉฐ, ์๋์ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผํ๋ค.
- ๊ฒฝ์ฌ๋ก๋ ๋ฎ์ ์นธ์ ๋์ผ๋ฉฐ, L๊ฐ์ ์ฐ์๋ ์นธ์ ๊ฒฝ์ฌ๋ก์ ๋ฐ๋ฅ์ด ๋ชจ๋ ์ ํด์ผ ํ๋ค.
- ๋ฎ์ ์นธ๊ณผ ๋์ ์นธ์ ๋์ด ์ฐจ์ด๋ 1์ด์ด์ผ ํ๋ค.
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ๋ฎ์ ์นธ์ ๋์ด๋ ๋ชจ๋ ๊ฐ์์ผ ํ๊ณ , L๊ฐ์ ์นธ์ด ์ฐ์๋์ด ์์ด์ผ ํ๋ค.
์๋์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋ค.
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ๊ณณ์ ๋ ๊ฒฝ์ฌ๋ก๋ฅผ ๋๋ ๊ฒฝ์ฐ
- ๋ฎ์ ์นธ๊ณผ ๋์ ์นธ์ ๋์ด ์ฐจ์ด๊ฐ 1์ด ์๋ ๊ฒฝ์ฐ
- ๋ฎ์ ์ง์ ์ ์นธ์ ๋์ด๊ฐ ๋ชจ๋ ๊ฐ์ง ์๊ฑฐ๋, L๊ฐ๊ฐ ์ฐ์๋์ง ์์ ๊ฒฝ์ฐ
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋๋ค๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ
L = 2์ธ ๊ฒฝ์ฐ์ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.

๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ๋ค.

์์ ๊ทธ๋ฆผ์ ๊ฐ์ฅ ์ผ์ชฝ๋ถํฐ 1๋ฒ, 2๋ฒ, 3๋ฒ, 4๋ฒ ์์ ๋ผ๊ณ ํ์ ๋, 1๋ฒ์ ๋์ด ์ฐจ์ด๊ฐ 1์ด ์๋๋ผ์, 2๋ฒ์ ๊ฒฝ์ฌ๋ก๋ฅผ ๋ฐ๋ฅ๊ณผ ์ ํ๊ฒ ๋์ง ์์์, 3๋ฒ์ ๊ฒน์ณ์ ๋์์, 4๋ฒ์ ๊ธฐ์ธ์ด๊ฒ ๋์์ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ด๋ค.
๊ฐ์ฅ ์์ ์ฃผ์ด์ง ๊ทธ๋ฆผ ์์ ๊ฒฝ์ฐ์ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ํ๋์์ผ๋ก, ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ๋นจ๊ฐ์์ผ๋ก ํ์๋์ด ์์ผ๋ฉฐ, ์๋์ ๊ฐ๋ค. ๊ฒฝ์ฌ๋ก์ ๊ธธ์ด L = 2์ด๋ค.
์ง๋๊ฐ ์ฃผ์ด์ก์ ๋, ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋์ด๋ 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
โ๐ปํ์ด
ํ๋์ ํ์ด๋ ํ๋์ ์ด์ด ๊ฐ๊ฐ ๊ธธ์ ๋ํ๋ธ๋ค๊ณ ํ์ผ๋ฏ๋ก ์ฃผ์ด์ง ํ๋ ฌ์ ์ ์นํ์ฌ ๊ฐ๊ฐ์ ๊ธธ์ ํ์ํ๊ธฐ ํธํ๊ฒ ํ๋ค.
๋ฌธ์ ์์ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์๋ ์กฐ๊ฑด์ ๋ณด๋ฉด L๊ฐ์ ์ฐ์๋ ์นธ์ ๊ฒฝ์ฌ๋ก์ ๋ฐ๋ฅ์ด ๋ชจ๋ ์ ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฎ์ ์นธ๊ณผ ๋์ ์นธ์ ๋์ด ์ฐจ๋ 1์ด๊ณ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ๋ฎ์ ์นธ์ ๋์ด๋ ๋ชจ๋ ๊ฐ์์ผ ํ๋ฉฐ, L๊ฐ์ ์นธ์ด ์ฐ์๋์ด ์์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ธธ์ ํ์ํ ๋ ์ฐ์ ๊ฒฝ์ฌ๋ก์ ๋์ด ์ฐจ๊ฐ 1์ธ์ง ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค. ๋์ด ์ฐจ๊ฐ 1์ด ์๋๋ผ๋ฉด ๊ทธ ๊ธธ์ ๋ ์ด์ ํ์ํ์ง ์๋๋ค. ๋ง์ฝ ๋์ด ์ฐจ๊ฐ 1์ด๋ผ๋ฉด ๋ฎ์ ์นธ์ด ์ฐ์์ ์ผ๋ก L๊ฐ๊ฐ ์๋์ง ํ์ธํ๋ค. ๋์ด๊ฐ ๊ฐ์ ์นธ์ด L๊ฐ๋ก ์ฐ์์ ์ด์ง ์์ผ๋ฉด ๊ทธ ๊ธธ์ ๋ ์ด์ ํ์ํ์ง ์๋๋ค. break์ ๊ฑธ๋ฆฌ์ง ์๊ณ for๋ฌธ์ ๋์ค๋ฉด ๊ทธ ๊ธธ์ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ด๋ฏ๋ก answer + 1์ ํ๋ค.
์ด๋ฐ ์์ผ๋ก ๋ชจ๋ ๊ธธ์ ํ์ํ๋ฉด ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ๊ฐ์๋ฅผ ์ฐพ์ ์ ์๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
n, l = map(int, input().split())
roads = [list(map(int, input().split())) for _ in range(n)]
roads_tr = list(map(list, zip(*roads))) # ํ๋ ฌ ์ ์น
answer = 0
def search(road):
global answer
visited = [False] * n #๊ฒฝ์ฌ๋ก๋ฅผ ์ด๋ฏธ ๋์๋์ง ์ฌ๋ถ ์ฒดํฌ
for i in range(1, n):
if abs(road[i] - road[i-1]) > 1:
break
elif abs(road[i] - road[i-1]) == 1:
k = 0
# ๋จผ์ ๋ฎ์ ์นธ์ ์ฐพ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฝ์ฌ๋ก๋ฅผ ๋๋ค๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ์ ๋๋ฏ๋ก ๋ฒ์๋ฅผ ๋จผ์ ์ง์ ํ๋ค.
# ๊ฒฝ์ฌ๋ก๊ฐ ๊ฒน์น๋ฉด ์ ๋๋ฏ๋ก ๊ฒฝ์ฌ๋ก ์ ๋ฌด๋ฅผ ํ์ธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์์ ์ผ๋ก ์๋ ๊ฒ์ด L๊ฐ์ ๊ฐ์ ๋๊น์ง ํ์ํ๋ค.
if road[i] > road[i-1]:
while i-1-k > -1 and not visited[i-1-k] and road[i-1-k] == road[i]-1 and k != l:
visited[i-1-k] = True
k+=1
elif road[i] < road[i-1]:
while i+k < n and not visited[i+k] and road[i+k] == road[i-1]-1 and k != l:
visited[i+k] = True
k+=1
# ์นธ ์๊ฐ ๊ฒฝ์ฌ๋ก ๊ธธ์ด๋ณด๋ค ์งง์ผ๋ฉด ๋ ์ด์ ํ์ํ์ง ์๋๋ค.
if k < l:
break
else:
answer += 1
for i in range(n):
dfs(roads[i])
dfs(roads_tr[i])
print(answer)
๐ํ๊ธฐ

๋จ์ ๊ตฌํ ๋ฌธ์ ๋ผ์ ์ฝ๋๋ฅผ ์ง๊ธฐ๋ ํ์ง๋ง ๋ญ๊ฐ ์ฝ๋๋ฅผ ๋ ๊ฐ์ ํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค] 23288. ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ2/Python - Gold3 (0) | 2026.03.24 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] n์ง์ ๊ฒ์/Python - Lv.2 (0) | 2025.10.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ํํ/Python - Lv.2 (0) | 2025.10.07 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋ด์ค ํด๋ฌ์คํฐ๋ง/Python - Lv.2 (0) | 2025.10.02 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋น๋ฐ์ง๋/Python - Lv.1 (0) | 2025.10.01 |
