[백준, 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)