[백준/파이썬] 1913번 달팽이 풀이

업데이트:



문제 정보


풀이

문제

N x N 배열을 달팽이 형태로 채우고, 주어진 값 F의 위치를 출력하는 문제입니다.

코드

n, f, rj = int(input()), int(input()), []
nums = [[0]*n for _ in range(n)]
i, j, v = -1, 0, n*n
while v > 0:
    while i+1 < n and nums[i+1][j] == 0:
        i+=1
        nums[i][j], rj = v, [i+1, j+1] if v==f else rj
        v-=1
    while j+1 < n and nums[i][j+1] == 0:
        j+=1
        nums[i][j], rj = v, [i+1, j+1] if v==f else rj
        v-=1
    while i-1 < n and nums[i-1][j] == 0:
        i-=1
        nums[i][j], rj = v, [i+1, j+1] if v==f else rj
        v-=1
    while j-1 < n and nums[i][j-1] == 0:
        j-=1
        nums[i][j], rj = v, [i+1, j+1] if v==f else rj
        v-=1
result = ""
for row in nums:
    result+=" ".join(map(str, row))+"\n"
print(result[:-1])
print(*rj)

설명

현재 방향으로 갈 수 있을 때까지 이동하며 숫자를 감소시키고, 막히면 방향을 바꿔 반복합니다.

배열을 채우는 동안 F를 만났을 때의 좌표를 함께 저장해 마지막에 달팽이 배열과 좌표를 출력합니다.



이런 주제는 어떠신가요?

비슷한 난이도와 유형의 문제를 이어서 보면 풀이 감각을 더 빠르게 잡기 좋습니다.

댓글남기기