얼음녹차의 블로그
article thumbnail

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/120842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음 작성한 코드

  • 값을 집어넣을 리스트를 길이에 맞게 생성해 준다.
    • 각 행의 길이가 n이므로, 열의 길이는 num_list의 길이를 n으로 나눈 몫을 통해 구해준다.
      • 몫을 구하는 것이 정수형 그대로 쓸 수 있기 때문에 사용
    • 2차원 리스트를 [[0]*n]*m 식으로 생성해 버리면 안쪽의 리스트들이 주소를 공유하기 때문에 사용하면 안 된다.
      • 리스트 컴플리핸션으로 작성하여 구현해 주자
  • num_list의 각 요소 값들을 인덱스 nth과 n으로 몫과 나머지를 계산하여 올바른 위치에 삽입해준다.
def solution(num_list, n):
    answer_lst = [[0] * n for _ in range(len(num_list) // n)]
    for nth, i in enumerate(num_list):
        answer_lst[nth // n][nth % n] = i
    return answer_lst

# 입출력 예시
print(solution([1, 2, 3, 4, 5, 6, 7, 8], 2))
print(solution([100, 95, 2, 4, 5, 6, 18, 33, 948], 3))

 

다른 코드

[코드1]

  • Append 함수를 이용해 조금 더 쉽게 작성이 가능하다.
  • 리스트 num_list를 n간격으로 슬라이싱 하여 출력할 리스트에 삽입해주면 된다.
def solution(num_list, n):
    answer = []
    for i in range(0, len(num_list), n):
        answer.append(num_list[i : i + n])
    return answer

이를 조금 더 줄인다면 아래와 같이 리스트 컴프리헨션으로 구현할 수 있다.

answer = [num_list[i : i + n] for i in range(0, len(num_list), n)]

 

[코드2]

  • 넘파이를 이용한 방법으로 구현이 가능하다.
  • 리스트를 넘파이 어레이로 바꾸어주고 reshape 함수를 사용하여 차원 변환을 한다.
  • Tolist 함수는 출력을 다시 리스트 타입으로 바꾸어주기 위함이다.
import numpy as np
def solution(num_list, n):
    answer = np.array(num_list).reshape(-1, n)
    return answer.tolist()

넘파이가 수학적인 연산을 할 때 굉장히 편리한 라이브러리이다. 실제로 많이 쓰이지만, 코딩테스트에서는 보통 외부 라이브러리의 사용을 금하기 때문에 참고만 하는 것이 좋다.

profile

얼음녹차의 블로그

@PERIR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!