문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/120842
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 작성한 코드
- 값을 집어넣을 리스트를 길이에 맞게 생성해 준다.
- 각 행의 길이가 n이므로, 열의 길이는 num_list의 길이를 n으로 나눈 몫을 통해 구해준다.
- 몫을 구하는 것이 정수형 그대로 쓸 수 있기 때문에 사용
- 2차원 리스트를 [[0]*n]*m 식으로 생성해 버리면 안쪽의 리스트들이 주소를 공유하기 때문에 사용하면 안 된다.
- 리스트 컴플리핸션으로 작성하여 구현해 주자
- 각 행의 길이가 n이므로, 열의 길이는 num_list의 길이를 n으로 나눈 몫을 통해 구해준다.
- 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()
넘파이가 수학적인 연산을 할 때 굉장히 편리한 라이브러리이다. 실제로 많이 쓰이지만, 코딩테스트에서는 보통 외부 라이브러리의 사용을 금하기 때문에 참고만 하는 것이 좋다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Programmers][Python] 로그인 성공? (0) | 2023.03.02 |
---|---|
[Programmers][Python] 영어가 싫어요 (0) | 2023.03.01 |
[Programmers][Python] 대충 만든 자판 (0) | 2023.02.27 |
[Programmers][Python] 문자열 밀기 (0) | 2023.02.25 |
[Programmers][Python] 잘라서 배열로 저장하기 (0) | 2023.02.25 |