1913번 달팽이

·2021년 1월 17일
0

PS

목록 보기
1/42

문제 출처 : https://www.acmicpc.net/problem/1913

문제가 쉬워보여 가벼운 마음으로 접근했는데 생각보다 생각이 안 떠올라 결국 노가다...
한 변은 N개의 요소들로 이루어져있다. 이를 바람개비처럼 생각해보면 껍질 하나의 총 요소의 개수는 4*(N-1)개이다. 이를 매 껍질마다 N-1번씩 연산

import sys

N = int(sys.stdin.readline().rstrip("\n"))
target= int(sys.stdin.readline().rstrip("\n"))
snail=[[0 for n in range(N)] for _ in range(N)]
start = N**2
result=[]

def snail_fuc(n ,c, s) :
	if n==1 :
    	snail[N//2][N//2]=1
    	return
    
	for i in range(n-1) : #N=7
    	snail[i+c][c] = s
    	if target==s:
        	result.extend([i+c+1,c+1])
    	snail[N-1-c][i+c] = s-(n-1)
    	if target==s-(n-1):
        	result.extend([N-c,i+c+1])
    	snail[N-1-c-i][N-1-c] = s-(n-1)*2
    	if target==s-(n-1)*2:
        	result.extend([N-c-i,N-c])
    	snail[c][N-1-c-i] = s-(n-1)*3
    	if target==s-(n-1)*3:
        	result.extend([c+1,N-c-i])
    	s-=1
	s=(n-2)**2
	snail_fuc(n-2,c+1,s)

snail_fuc(N,0,start)
for n in range(N):
	for m in snail[n] :
    	print(m,end=" ")
	print()
for i in result :
	print(i,end=" ")
    

출처:https://egg-money.tistory.com/85
움직임(VECTOR)을 표현하는 좌표를 list로 만들어 수학적 식, 규칙과 적절히 이용.

profile
세상은 너무나도 커

0개의 댓글