반응형
문제
- 양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ n ≤ 30
입출력 예

코드1 (효율X)
def solution(n):
answer = [[0]*n for _ in range(n)]
x_line = list(range(0, n))
y_line = list(range(0, n))
x, num = 0, 0
while(1):
# 오른쪽 추가
for y in range(min(y_line), max(y_line)+1):
num += 1
answer[x][y] = num
x_line.remove(min(x_line))
if len(x_line) == 0:
break
# 아래 추가
for x in range(min(x_line), max(x_line)+1):
num += 1
answer[x][y] = num
y_line.remove(max(y_line))
if len(y_line) == 0:
break
# 왼쪽 추가
for y in range(max(y_line), min(y_line)-1, -1):
num += 1
answer[x][y] = num
x_line.remove(max(x_line))
if len(x_line) == 0:
break
# 위 추가
for x in range(max(x_line), min(x_line)-1, -1):
num += 1
answer[x][y] = num
y_line.remove(min(y_line))
if len(y_line) == 0:
break
return answer
코드2
def solution(n):
answer = [[0]*n for _ in range(n)]
top, bottom = 0, n-1
left, right = 0, n-1
num = 1
while(top <= bottom) and (left <= right):
for y in range(left, right+1):
answer[top][y] = num
num +=1
top += 1
for x in range(top, bottom+1):
answer[x][right] = num
num +=1
right -= 1
for y in range(right, left-1, -1):
answer[bottom][y] = num
num +=1
bottom -= 1
for x in range(bottom, top-1, -1):
answer[x][left] = num
num +=1
left += 1
return answer
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
반응형
'프로그래머스 > Level_0' 카테고리의 다른 글
| [프로그래머스] Lv.0 - 연속된 수의 합.py (0) | 2026.04.06 |
|---|---|
| [프로그래머스] Lv.0 - 다음에 올 숫자.py (0) | 2026.04.06 |
| [프로그래머스] Lv.0 - [PCCE 기출문제] 닉네임 규칙.py (0) | 2026.04.04 |
| [프로그래머스] Lv.0 - [PCCE 기출문제] 버스.py (1) | 2026.03.21 |
| [프로그래머스] Lv.0 - [PCCE 기출문제] 물 부족.py (0) | 2026.03.21 |