728x90
반응형
*문제 출처는 프로그래머스에 있습니다.
문제 제목: 정수를 나선형으로 배치하기
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ n ≤ 30
입출력 예nresult
4 | [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]] |
5 | [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
0 | 1 | 2 | 3 | 4 |
1 | 12 | 13 | 14 | 5 |
2 | 11 | 16 | 15 | 6 |
3 | 10 | 9 | 8 | 7 |
따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.
입출력 예 #2
- 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
0 | 1 | 2 | 3 | 4 | 5 |
1 | 16 | 17 | 18 | 19 | 6 |
2 | 15 | 24 | 25 | 20 | 7 |
3 | 14 | 23 | 22 | 21 | 8 |
4 | 13 | 12 | 11 | 10 | 9 |
따라서 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]를 return 합니다.
나의 풀이
달팽이기본 문제. 달팽이 진행 방향을 먼저 확인 하고, d % 4 해주면 된다.
방문처리와 동시에 달팽이 수를 저장하면 됨
from collections import deque
def solution(n):
result = bfs(n)
return result
def bfs(n):
visited = [[-1] * n for i in range(n)]
direct = ((0, 1), (-1, 0), (1, 0), (0, -1))
visited[0][0] = 1
start = (0, 0)
d = 0
i = d % 4
queue = deque([start])
cnt = 1
while queue:
if cnt == n * n:
break
qy, qx = queue.popleft()
ny = direct[i][0] + qy
nx = direct[i][1] + qx
if 0 <= ny < n and 0 <= nx < n and visited[ny][nx] == -1:
cnt += 1
visited[ny][nx] = cnt
queue.append((ny, nx))
else:
d += 1
i = d % 4
queue.append((qy, qx))
return visited
728x90
반응형
'coding test - python > Programmers' 카테고리의 다른 글
Programmers / [복습] 전화번호 목록 - 해시 / Python 파이썬 (0) | 2025.04.03 |
---|---|
Programmers / [복습] H-index - 정렬 / Python 파이썬 (0) | 2025.04.02 |
Programmers / [복습] 할인 행사 - 슬라이딩윈도우 / Python 파이썬 (1) | 2025.03.30 |
Programmers / [복습] 피로도 - 순열 , 그리디 / Python 파이썬 (0) | 2025.03.30 |
백준 / 2812번 크게 만들기 - 스택 / Python 파이썬 (0) | 2025.03.29 |