백준 1913 달팽이

gmlwlswldbs·2021년 11월 1일
0

코딩테스트

목록 보기
70/130
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

n = int(input())
f = int(input())

g = [[-1] * (n) for _ in range(n)]
turn = [-1] * (n**2-1)

iter = 0
maxiter = 0
i = 0
dirc = 0
while True:
    if i == len(turn):
        break
    turn[i] = dirc%4
    if iter == maxiter:
        iter = 0
        dirc += 1
        if turn[i] == 1 or turn[i] == 3:
            maxiter += 1
    else:
        iter += 1
    i += 1

sx, sy = n//2, n//2
nn = 1
g[sx][sy] = nn
# f == 1 인 경우
xans = yans = n//2 + 1
for j in range(len(turn)):
    nn += 1
    sx, sy = sx + dx[turn[j]], sy + dy[turn[j]]
    g[sx][sy] = nn
    if nn == f:
        xans, yans = sx + 1, sy + 1

for j in range(n):
    for k in range(n):
        print(g[j][k], end=' ')
    print()

print(xans, yans)

f가 1인 경우를 생각하지 않아서 틀렸다

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

n = int(input())
f = int(input())

g = [[-1] * (n) for _ in range(n)]
turn = [-1] * (n**2-1)

iter = 0
maxiter = 0
i = 0
dirc = 0
while True:
    if i == len(turn):
        break
    turn[i] = dirc%4
    if iter == maxiter:
        iter = 0
        dirc += 1
        if turn[i] == 1 or turn[i] == 3:
            maxiter += 1
    else:
        iter += 1
    i += 1

sx, sy = n//2, n//2
nn = 1
g[sx][sy] = nn
for j in range(len(turn)):
    nn += 1
    sx, sy = sx + dx[turn[j]], sy + dy[turn[j]]
    g[sx][sy] = nn
    if nn == f:
        xans, yans = sx + 1, sy + 1

for j in range(n):
    for k in range(n):
        print(g[j][k], end=' ')
    print()

print(xans, yans)

처음에 이런 식으로 xans, yans 를 초기화하지 않아서 nameerror 남

0개의 댓글