[프로그래머스 Python] 코딩 기초 트레이닝 Day 25 - 이차원 리스트(배열)
1. 정수를 나선형으로 배치하기
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ n ≤ 30
코드 작성
def solution(n):
# 0으로 채워진 초기 배열 지정
arr = [[0 for i in range(n)] for j in range(n)]
# 시작 위치, 방향 설정
x, y = 0, 0
direc = 'r'
for i in range(n**2):
arr[x][y] = i+1
if direc == 'r':
if y == n-1 or arr[x][y+1] != 0:
direc = 'd'
x += 1
else:
y += 1
elif direc == 'd':
if x == n-1 or arr[x+1][y] != 0:
direc = 'l'
y -= 1
else:
x += 1
elif direc == 'l':
if y == 0 or arr[x][y-1] != 0:
direc = 'u'
x -= 1
else:
y -= 1
elif direc == 'u':
if x == 0 or arr[x-1][y] != 0:
direc = 'r'
y += 1
else:
x -= 1
return arr
나선형으로 1 ~ n**2
의 숫자를 배치해야하기 때문에 숫자를 입력하는 방향을 x축을 기준으로 오른쪽, y축을 기준으로 아래, x축을 기준으로 왼쪽, y축을 기준으로 위를 반복하도록 했다. 축을 기준으로 끝에 위치했거나 진전하는 과정에서 그 다음 위치에 있는 값이 이미 채워져있다면 다시 방향을 전환하는 식으로 조건문을 작성했다.
2. 특별한 이차원 배열 2
n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요. = 0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]
제한사항
- 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
- 1 ≤ arr의 원소의 원소 ≤ 1,000
- 모든 arr의 원소의 길이는 같습니다.
코드 작성
def solution(arr):
for i, a in enumerate(arr):
for j in range(len(a)):
if arr[i][j] != arr[j][i]:
return 0
return 1
3. 정사각형으로 만들기
이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 100
- 1 ≤ arr의 원소의 길이 ≤ 100
- arr의 모든 원소의 길이는 같습니다.
- 1 ≤ arr의 원소의 원소 ≤ 1,000
코드 작성
def solution(arr):
col = len(arr[0])
row = len(arr)
answer = arr
if col == row:
return arr
elif col > row:
for _ in range(col-row):
answer.append([0 for _ in range(col)])
elif col < row:
for a in answer:
for _ in range(row-col):
a.append(0)
return answer
4. 이차원 배열 대각선 순회하기
2차원 정수 배열 board와 정수 k가 주어집니다.
i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ board의 길이 ≤ 100
- 1 ≤ board[i]의 길이 ≤ 100
- 1 ≤ board[i][j] ≤ 10,000
- 모든 board[i]의 길이는 같습니다.
- 0 ≤ k < board의 길이 + board[i]의 길이
코드 작성
def solution(board, k):
answer = 0
for i, b in enumerate(board):
for j in range(len(b)):
if i+j <= k:
answer += board[i][j]
return answer
코드 작성(한줄 요약)
def solution(board, k):
return sum([board[i][j] for i in range(len(board)) for j in range(len(board[i])) if i+j <=k])
📍 문제 출처
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기