정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 2 * 4 배열로 변경한 [[1, 2], [3, 4], [5, 6], [7, 8]] 을 return합니다.
num_list가 [100, 95, 2, 4, 5, 6, 18, 33, 948] 로 길이가 9이고 n이 3이므로 3 * 3 배열로 변경한 [[100, 95, 2], [4, 5, 6], [18, 33, 948]] 을 return합니다.
import numpy as np
def solution(num_list, n):
return (np.array(num_list).reshape((len(num_list) // n ,n))).tolist()
우선 numpy
라는 라이브러리를 import 한다.
(알고리즘 문제에서 라이브러리를 사용하는 게 좋은 건지는 모르겠지만...
프로그래머스 문제에서 종종 보기도 했고 모르는 개념이므로 이 참에 정리해보려고 한다.)
numpy가 무엇인지에 앞서 왜 이 라이브러리를 사용하는지 궁금했다.
다양한 설명이 있었는데 내가 이해하기엔 쉽지 않아서 방황하다...
그나마 쉽게 설명된 글을 찾았다.
파이썬의 내장 기능인 리스트 또한 Numpy 배열과 동일한 기능을 제공할 수 있기 때문에 왜 Numpy를 사용해야 하는지 의문이 듭니다. 배열의 크기가 작으면 문제가 되지 않지만 Numpy 배열은 데이터의 크기가 커질수록 저장 및 가공을 하는데 효율성을 보장합니다. (출처: https://brownbears.tistory.com/480)
우선 np.array()의 인자에 기존 파이썬 배열을 넣으면 쉼표가 없는 형태의 배열이 반환된다.
import numpy as np
a = np.array([1,2,3])
print(a)
>> [1 2 3]
결과값으로 출력된 [1 2 3]
는 요상한 형태의 배열이다.
이것은 ndarray라고 하는데, N차원 배열 객체
라고 한다.
음... N차원 배열 객체...?
아무래도 이 개념을 지금 완전히 이해하기에는 어려울 것 같으니
먼저 파이썬의 list와 numpy의 ndarray는 어떤 차이가 있는지 찾아보자.
Python의 list는 메모리에 공간을 할당하여 데이터를 저장하고, 그 주소를 연결합니다. 이때 값을 찾아야 하기 때문에 추가 연산이 필요합니다. 하지만 numpy ndarray는 차례대로 메모리를 할당하여 데이터를 쌓는 구조입니다. 그래서 연산이 더 빠릅니다.
출처: numpy ndarray, python list 차이 : 네이버 블로그
또한 찾아본 바로는 파이썬은 array를 지원하지 않는다고 한다.
list와 array는 엄연히 다른 자료형이라고 한다.
Array는 정적 할당에 해당하며, List의 경우는 동적 할당에 해당합니다.
동적으로 계속 크기가 변할 수 있는 Python List와 달리 NumPy Array는 고정된 크기를 갖습니다. Size를 변화하면 기존의 array를 삭제하고 새로운 array를 생성해야 합니다.
출처: https://chancoding.tistory.com/10
여기까지 살펴봤으면 다시 풀이로 돌아가서...
import numpy as np
def solution(num_list, n):
return (np.array(num_list).reshape((len(num_list) // n ,n))).tolist()