[코딩 테스트 연습 입문] 2차원으로 만들기

2022. 12. 25. 21:26code/[프로그래머스] python

문제

정수 배열 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의 길이

 

입출력 예

 

입출력 예 설명

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

 

✔풀이

def solution(num_list, n):
    answer = [[]]

    for i in range(0,len(num_list)//n):
        new=[]
        for k in range(i*n,(i+1)*n):
            new.append(num_list[k])
        answer.insert(i,new)
        
    answer.pop()

    return answer

📝설명

answer의 각 인덱스의 개수는 num_list 원소의 개수에서 n값을 나눈 몫이다.

따라서, for문을 통해 해당 횟수만큼 반복하고, 새로운 리스트 new에 answer의 각 인덱스에 들어갈 리스트를 넣어서 answer의 인덱스를 채워야겠다고 생각했다.

인덱스 넘버는 0부터 시작하기 때문에 for문의 반복범위도 0으로 시작하게 했다.

그리고 new라는 빈 리스트를 생성하도록 했다.

다음에 다시 for문과 .append()을 사용해서 num_list의 원소를 2차원 배열의 각 원소 리스트가 되도록 묶었다.

반복범위는 다음과 같다.

우선 상단의 입출력 예 1을 두고 생각해본다면!

i가 0일 때, 반복범위는 (0,2)가 되고, new는 [1,2]가 된다.

i가 1일 때, 반복범위는 (2,4)가 되며, new는 [3,4]가 된다. 

이런 식으로 각각의 리스트를 만들고 난 다음에 마지막에는 빈 리스트가 더해지게 된다. 

해당 빈 리스트를 .pop()을 통해 지우면 끝!

 

👑모범 답안

🔎for문을 이용했는데 더 짧게 코드를 짰다.

간단하게 리스트를 잘라서 answer에 추가했다.

 

👀느낀 점

: 리스트 슬라이싱 기능을 배웠는데도, 구현해내질 못해서 코드가 길어졌다.

슬라이싱 기능을 난 분명 잘 할 수 있는 사람이다.

다음번에 슬라이싱을 사용해야 하는 코드가 있다면, 잘 해내야지