10157
๊ฐ๋จํ๋ฐ ํธ๋๋ฐ ์ค๋๊ฑธ๋ฆฐ DFS ๋ฌธ์ ( ์ ์ค๋ ๊ฑธ๋ ธ๋์ง๋ ๋ค์ ๋์ด..)
์ต์ ์ ๊ฒฝ์ฐ 1์ต๋ฒ๊น์ง ๊ณ์ฐํด์ผํ๊ธฐ ๋๋ฌธ์ DFS ๋ฅผ ์ฌ๊ท๋ก ๋ง๊ณ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํํ์ !
์ธ๋ฑ์ค ๋ฒ์ ๋์ด๊ฐ๊ฑฐ๋ ๋ฐฉ๋ฌธ๋์ด ์์ผ๋ฉด ๋ฐฉํฅ ํ์ด์ค. ์์๋ ์, ์ฐ, ํ, ์ข ์์ผ๋ก ๋ฐ๋ณต
ํด๋น k์ ๋๋ฌํ๋ฉด ํ์ฌ ์์น๋ฅผ ๋ฌธ์ ์ ์ธ๋ฑ์ค์ ๋ง์ถฐ์ ( ์ด, ํ ) ์ถ๋ ฅ
์๋ ์ธ๋ฑ์ฑ์ ํฌํํ๊ฒ ํ ๊ฒ๋ ๋ชจ์๋ผ์, ์ ( ์ด, ํ ) ์ผ๋ก ๋ํ๋์๊น. ์ฌ์ง์ด TC 30% ๊ฐ ํ = ์ด ์ธ ๊ฒฝ์ฐ๋ก ํด๋์ 30% ๊น์ง ์ฑ์ ์ค์ด ๋ ์ ๋๋ฒ๊น ํ ๋ ํ์ ๋ชป ํจ.
๋ฌธ์ ๋ฅผ ์ ์ฝ์ ๊ฐ ๋ง๊ธด ํ๋ฐ, ์ด ์์ค์ด ๋ง๊ธด ํ๊ฐ ์ถ๋ค.
c, r = map(int,input().split())
# visited ๊ฐ๋
์ผ๋ก ๋ง๋ฆ
a = [[0 for _ in range(c)] for _ in range(r)]
total = c * r
k = int(input())
# ์ ์ด์ ๋ฐฐ์ ๋ชป ํ๋ค๋ฉด ๋จผ์ 0 ์ถ๋ ฅ
if k > total:
print(0)
exit()
# ์, ์ฐ, ํ, ์ข
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
d = 0
cnt = 1
stack = [(r - 1, 0)]
while True:
x, y = stack.pop()
# ๋ฐฉ๋ฌธ ์ํ
a[x][y] = 1
if cnt == k:
print(y + 1, r - x)
exit()
# ๋ค์ ๊ฐ ๊ณณ
nx = x + dx[d]
ny = y + dy[d]
# ์ธ๋ฑ์ฑ ๋ฒ์ด๋๊ฑฐ๋ ๋ฐฉ๋ฌธ๋์ด์๋ค๋ฉด ๋ฐฉํฅ ํ๊ธฐ
if 0 > nx or r <= nx or 0 > ny or c <= ny or a[nx][ny] == 1:
d = (d + 1) % 4
nx = x + dx[d]
ny = y + dy[d]
cnt += 1
stack.append((nx, ny))
Last updated
Was this helpful?