[프로그래머스] 2차원으로 만들기 (Python)

TK·2023년 9월 5일

문제 설명

정수 배열 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_listnresult
[1, 2, 3, 4, 5, 6, 7, 8]2[[1, 2], [3, 4], [5, 6], [7, 8]]

제한사항

  • num_list의 길이는 n의 배 수개입니다.
  • 0 ≤ num_list의 길이 ≤ 150
  • 2 ≤ n < num_list의 길이

입출력 예

num_listnresult
[1, 2, 3, 4, 5, 6, 7, 8]2[[1, 2], [3, 4], [5, 6], [7, 8]]
[100, 95, 2, 4, 5, 6, 18, 33, 948]3[[100, 95, 2], [4, 5, 6], [18, 33, 948]]

입출력 예 설명

  • 입출력 예 #1
    num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 2 * 4 배열로 변경한 [[1, 2], [3, 4], [5, 6], [7, 8]] 을 return합니다.

  • 입출력 예 #2
    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합니다.


정답 풀이1

def solution(num_list, n):
    answer = []
    for i in range(0, len(num_list), n):
        answer.append(num_list[i:i+n])
    return answer
num_listnresult
[1, 2, 3, 4, 5, 6, 7, 8]2[[1, 2], [3, 4], [5, 6], [7, 8]]

위의 예시일 경우,

  • for문의 range는 range(0, 8, 2) => 0부터 7까지 2간격으로
    • i = 0인 경우, num_list[0:2] => 0번 인덱스부터 1번 인덱스까지 출력 ( [1, 2] )
    • i = 2인 경우, num_list[2:4] => 2번 인덱스부터 3번 인덱스까지 출력 ( [3, 4] )
    • i = 4인 경우, num_list[4:6] => 4번 인덱스부터 5번 인덱스까지 출력 ( [5, 6] )
    • i = 6인 경우, num_list[6:8] => 6번 인덱스부터 7번 인덱스까지 출력 ( [7, 8] )

정답 풀이2 (numpy 사용)

import numpy as np
def solution(num_list, n):
    li = np.array(num_list).reshape(-1,n)
    return li.tolist()

np.reshape 함수 기본 사용법

기본적인 사용 방법은 배열 a에 대하여 a.reshape(변환 shape) 혹은 np.reshape(a, 변환 shape)형태로 사용해주시면 됩니다. axis 순서대로(가로 -> 세로 축 방향) 값들을 변환되는 shape으로 재배정하는 원리이며, 재배정이 불가능한 shape인 경우 ValueError가 발생합니다.

import numpy as np
a = np.arange(9)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
a.reshape(3, 3) # np.reshape(a, (3, 3))으로도 사용 가능
'''array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])'''
a.reshape(2, 5) 
# ValueError: cannot reshape array of size 9 into shape (2,5)
# 2 * 5가 9가 아니라서 발생

reshape 함수 -1의 의미: -1을 넣은 자리에는 가능한 shape을 자동 계산하여 반영
더보기: https://jimmy-ai.tistory.com/99#google_vignette

정답 풀이3 (for문)

def solution(num_list, n):
    answer = []
    temp = []
    for i in num_list:
        temp.append(i)
        # 목표 개수 도달 시, answer에 밀어 넣고 비움
        if len(temp) == n:
            answer.append(temp)
            temp = []
    return answer
profile
쉬운게 좋은 FE개발자😺

0개의 댓글