= [백준, python] 1913번 - 달팽이 | 개발하는 쿼카

[백준, python] 1913번 - 달팽이

백준 문제풀이 시작


문제

홀수인 자연수 N이 주어지면, 다음과 같이 1부터 N2까지의 자연수를 달팽이 모양으로 N×N의 표에 채울 수 있다.
제목

제목

N이 주어졌을 때, 이러한 표를 출력하는 프로그램을 작성하시오. 또한 N2 이하의 자연수가 하나 주어졌을 때, 그 좌표도 함께 출력하시오. 예를 들어 N=5인 경우 6의 좌표는 (4,3)이다.

입력

첫째 줄에 홀수인 자연수 N(3 ≤ N ≤ 999)이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N^2 이하의 자연수가 하나 주어진다.

출력

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.


풀이

풀이 확인하기

이번 문제는 구현 문제로 문제에 주어진 조건대로만 문제를 풀면 풀 수 있다. 그래서 머릿속에 떠오르는 그대로 코드를 짰다. 그래서 코드가 상당히 길고 더러운데 이 부분은 충분히 줄일 수 있을 것 같다..

import sys
input = sys.stdin.readline

num = int(input())

lis = [[0 for _ in range(num)] for _ in range(num)]

find = int(input())

howMany = 1

currentx = int(num/2)
currenty = int(num/2)
lis[currentx][currenty] = 1
wherex = currentx
wherey = currenty

num2 = 2
for i in range(num - int(num/2) -1):
    currentx -= 1
    lis[currentx][currenty] = num2
    if(num2 == find):
        wherex = currentx
        wherey = currenty
    num2 += 1
    for _ in range(howMany):
        currenty += 1
        lis[currentx][currenty] = num2
        if(num2 == find):
            wherex = currentx
            wherey = currenty
        num2 += 1
    howMany += 1
    for _ in range(howMany):
        currentx += 1
        lis[currentx][currenty] = num2
        if(num2 == find):
            wherex = currentx
            wherey = currenty
        num2 += 1
        
    for _ in range(howMany):
        currenty -= 1
        lis[currentx][currenty] = num2
        if(num2 == find):
            wherex = currentx
            wherey = currenty
        num2 += 1

    for _ in range(howMany):
        currentx -= 1
        lis[currentx][currenty] = num2
        if(num2 == find):
            wherex = currentx
            wherey = currenty
        num2 += 1
    
    howMany+=1
    
for i in lis:
    print(*i)

print(wherex+1, end = " ")
print(wherey+1)