난이도
실버 III
풀이
구현 문제이다.
주어진 표에 달팽이 모양으로 숫자를 채워야 하는데 이 로직을 생각하는데 좀 어려웠다.
dx와 dy 배열을 두어서 그래프 좌표를 이동하도록 두고, 방향을 바꿔주는 것은 그래프의 범위를 넘어갈때 4를 나눠서 나머지를 통해서 dx,dy를 한칸씩 이동하도록 구현해주었다.
import sys
input = sys.stdin.readline
N=int(input())
num=int(input())
snail=[[0]*N for _ in range(N)]
x,y=0,0
target_x,target_y=0,0
direction=0
dx=[1,0,-1,0]
dy=[0,1,0,-1]
cnt=N**2
snail[x][y]=cnt
cnt-=1
while cnt>0:
nx=x+dx[direction]
ny=y+dy[direction]
if 0<=nx<N and 0<=ny<N and not snail[nx][ny]:
snail[nx][ny]=cnt
if cnt==num:
target_x=nx
target_y=ny
x=nx
y=ny
cnt-=1
else:
direction+=1
direction=direction%4
for row in snail:
for x in row:
print(x,end=" ")
print("")
print(target_x+1,end=" ")
print(target_y+1)
링크
https://www.acmicpc.net/problem/1913
1913번: 달팽이
N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
프로그래머스 키패드 누르기(2020 카카오 인턴십) (0) | 2023.03.10 |
---|---|
BOJ 2023번 - 신기한 소수 (0) | 2023.03.05 |
BOJ 17478번 - 재귀함수가 뭔가요? - 자바, 파이썬 (0) | 2023.03.05 |
BOJ 3613번 - Java vs C++ (0) | 2023.03.03 |
BOJ 2671번 - 잠수함식별 (0) | 2023.02.12 |