import sys
# ์์ ์
๋ ฅ
N, M, H = map(int, sys.stdin.readline().split())
ladders = [list(map(int, sys.stdin.readline().split())) for _ in range(M)]
_map = [[0] * N for _ in range(H)]
# ์ฌ๋ค๋ฆฌ ์ ๋ณด ์ ์ฅ
# ์ผ์ชฝ์ 1 ์ค๋ฅธ์ชฝ์ -1๋ก ์ ์ฅ
for ladder in ladders:
ladderR = ladder[0] - 1
ladderC = ladder[1] - 1
_map[ladderR][ladderC] = 1
_map[ladderR][ladderC + 1] = -1
# ๋ชจ๋ i๋ฒ ๊ฒฐ๊ณผ๊ฐ i๋ฒ ์ธ๊ฐ?
def isEqual():
for i in range(N):
location = i
for step in range(H):
if _map[step][location] == 1:
location += 1
elif _map[step][location] == -1:
location -= 1
if location != i:
return False
return True
plusNum = 0
ans = 4
def bt():
global plusNum
global ans
if plusNum < ans and isEqual():
ans = plusNum
return
if plusNum == 3:
return
for i in range(H):
for j in range(N - 1):
if abs(_map[i][j]) == 1 or abs(_map[i][j + 1]) == 1:
continue
_map[i][j] = 1
_map[i][j + 1] = -1
plusNum += 1
bt()
_map[i][j] = 0
_map[i][j + 1] = 0
plusNum -= 1
bt()
print(-1) if ans == 4 else print(ans)
๋ฌธ์ ์ ๊ทผ ๋ฐฉ๋ฒ
1. ์ธ๋ก์ ์ด N๊ฐ ์ด๊ณ ๊ฐ๋ก์ ์ ๋์ ์ ์๋ ๊ฐฏ์๋ H์ด๋ฏ๋ก N*H ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ _map์ผ๋ก ์ฌ์ฉ
2. ๋ฐฑํธ๋ํน์ ์ด์ฉํด์ ์ฌ๋ค๋ฆฌ๋ฅผ ๋์ ์ ์๋ ๊ณณ์ ๋ฃ์ด๋ณด๊ณ isEqual() ํจ์๋ฅผ ํตํด์ i๋ฒ์์ ์ถ๋ฐํ ๊ฒ์ด i๋ฒ์ ๋์ฐฉํ๋์ง ํ์ธ
3. ์ฌ๋ค๋ฆฌ ์์น ์ ์ฅ ์, ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ ๊ฒ์ 1, ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ฐ์ผํ๋ ๊ฒ์ -1๋ก ์ ์ฅํ๋ค. ๋ฐ๋ผ์ 1์ ๋ง๋๋ฉด ์ถ๋ฐ ์์น(i) ์์ +1 ํด์ผํ๊ณ -1์ ๋ง๋๋ฉด -1์ ํ๋ค.
4. ์ฌ๋ค๋ฆฌ๋ ์ฐ์ํด์ ๋์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฑํธ๋ํน ์ ์กฐ๊ฑด๋ฌธ ํ์ฉ
5. ๋ฐฑํธ๋ํน ๋ด, ์กฐ๊ฑด๋ฌธ์ ์ ํ์ฉํด์ผ ์๊ฐ์ด๊ณผ๋ฅผ ๋ง์ ์ ์๋ค.
5.1 ์ฌ๋ค๋ฆฌ ๊ฐฏ์๊ฐ isEqual() ํจ์๋ฅผ ์ง๋์ณค๋๋ฐ 3๊ฐ๋ผ๋ฉด ์ฌ๋ค๋ฆฌ ๊ฐฏ์๊ฐ 4๊ฐ ์ด์์ด ๋ฌด์กฐ๊ฑด ํ์ํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ๋ ๋ก์ง์ ๋๋ฆด ํ์๊ฐ ์๋ค. ( ๋ฌธ์ ์กฐ๊ฑด์์ 3๊ฐ๋ณด๋ค ํฌ๋ฉด -1์ ์ถ๋ ฅํ๋ผ๊ณ ํ์ผ๋ฏ๋ก)
5.2 ์์ ๋จผ์ isEqual()์ ๋ง์กฑํด์ ๊ฐฑ์ ๋ ์ฌ๋ค๋ฆฌ์ ๊ฐฏ์์ธ ans๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ง isEqual() ํจ์๋ก ํ์ธํด๋ณธ๋ค.