코드
def solution(num_list, n):
answer = []
for i in range(len(num_list)//n):
answer.append(num_list[n*i : n*(i+1)])
return answer
1차원 배열 num_list가 주어지면 n차원 배열로 바꾸는 문제이다.
단순히 n 개씩 잘라 answer에 추가하면 쉽게 풀 수 있다.
이때 n개씩 자르는 부분을 슬라이싱으로 구현해야 하는데 나는 기존 리스트는 건들지 않고 answer에 추가하려 했기 때문에 n*i부터 n*(i+1)로 작성했다.
문제에서 num_list는 n의 배수라고 알려주었기 때문에 for문의 범위를 len(num_list)//n으로 하였다. 이때 /를 사용하면 정수형태로 나오기 때문에 for문에서 오류가 발생하므로 //을 사용하여 정수인 몫을 범위로 지정해주어야 한다.
문제에서 주어지는 예시로 살펴보면 num_list = [1, 2, 3, 4, 5, 6, 7, 8]를 n = 2 차원으로 바꿔 answer = [[1, 2], [3, 4], [5, 6], [7, 8]] 와 같은 결과를 만들어내야 하는 것이다.
이때 for문은 0부터 4(= 8//2)까지 돌게 된다.
1) i=0 → n*i=2*0, n*(i+1)=2*1 → num_list[0:2]
다른 방법 - numpy 이용
import numpy as np
def solution(num_list, n):
answer = np.array(num_list)
answer = answer.reshape(-1, n)
return answer.tolist()
처음에는 numpy의 reshape 함수를 사용하려 했으나 ndarray를 list 형태로 바꾸는 함수를 몰라서 return 부분에서 계속 헤맸다.
.tolist()를 사용하면 ndarray를 list 형태로 바꿀 수 있다.
반응형