728x90
SMALL
구현 문제
https://www.acmicpc.net/problem/1913
접근 방식
- 중심 좌표로부터 시작한다.
- 특정 좌표로부터 위, 오, 아, 왼 순으로 이동한다.
- 이때, 위쪽과 아래쪽 방향으로 이동할 때, 이동해야할 길이(i)를 전보다 1 증가시켜준다.
if j == 0 or j == 2:
i += 1
- 이동해야 할 길이(i)만큼 이중 for문을 돈다.
- 현재 방향(j)으로 좌표를 한 칸 이동한 후, 해당 그래프의 좌표에 cnt를 기록해준다.
for _ in range(i):
if cnt == k:
ans.append(y + 1)
ans.append(x + 1)
if cnt >= n * n: return # while문 탈출 조건 지정
cnt += 1
y += dy[j]
x += dx[j]
graph[y][x] = cnt
💡 풀이코드 (성공)
import sys
n = int(sys.stdin.readline())
k = int(sys.stdin.readline())
dy = [-1, 0, 1, 0] # 위, 오, 아, 좌
dx = [0, 1, 0, -1] # 위, 오, 아, 좌
graph = [[0] * n for _ in range(n)]
ans = []
def sol():
cnt = 1
y = n // 2
x = n // 2
i = 0
graph[y][x] = cnt
while True:
for j in range(4):
if j == 0 or j == 2:
i += 1
for _ in range(i):
if cnt == k:
ans.append(y + 1)
ans.append(x + 1)
if cnt >= n * n: return # while문 탈출 조건 지정
cnt += 1
y += dy[j]
x += dx[j]
graph[y][x] = cnt
sol()
for i in graph:
print(*i)
print(*ans)
달팽이 수열의 규칙을 찾고, 구현하는 문제이다.
728x90
LIST
'Algorithm > Simulation' 카테고리의 다른 글
프로그래머스 모의고사 (0) | 2025.01.04 |
---|---|
[백준] 13460 : 구슬 탈출 2 (파이썬) (0) | 2024.08.02 |