Algorithm/Implementaion
[백준] 1913번 달팽이
등촌동 꼬북이
2020. 11. 26. 02:20
깡 구현 그 자체...
BFS에서 길 찾기 했던거 약간 응용함..
쓰읍.... 가독성을 위해 코드 길이가 길어졌는데..
썩 효율적이지도 못한거 같다..
N = int(input())
findNum = int(input())
snail = [[0] * N for _ in range(N)]
direction = [[1, 0], [0, 1], [-1, 0], [0, -1]] # 하 우 상 좌
diCurrent = 0
cX = 0
cY = 0
findX = 0
findY = 0
nN = N * N
while True:
if snail[cY][cX] == 0:
snail[cY][cX] = nN
nN -= 1
if nN == 0:
break
cY += direction[diCurrent][0]
cX += direction[diCurrent][1]
if cY == N:
cY -= 1
diCurrent += 1
if diCurrent == 4:
diCurrent = 0
cX += direction[diCurrent][1]
if cY == -1:
cY += 1
diCurrent += 1
if diCurrent == 4:
diCurrent = 0
cX += direction[diCurrent][1]
if cX == N:
cX -= 1
diCurrent += 1
if diCurrent == 4:
diCurrent = 0
cY += direction[diCurrent][0]
if cX == -1:
cX += 1
diCurrent += 1
if diCurrent == 4:
diCurrent = 0
cX += direction[diCurrent][1]
if snail[cY][cX] != 0:
cY -= direction[diCurrent][0]
cX -= direction[diCurrent][1]
diCurrent += 1
if diCurrent >= 4:
diCurrent = 0
cY += direction[diCurrent][0]
cX += direction[diCurrent][1]
for i in range(N):
for j in range(N):
if snail[i][j] == findNum:
findX = i + 1
findY = j + 1
print(snail[i][j], end=" ")
print()
print(findX, findY)