2022. 12. 25. 21:26ㆍcode/[프로그래머스] 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에 추가했다.
👀느낀 점
: 리스트 슬라이싱 기능을 배웠는데도, 구현해내질 못해서 코드가 길어졌다.
슬라이싱 기능을 난 분명 잘 할 수 있는 사람이다.
다음번에 슬라이싱을 사용해야 하는 코드가 있다면, 잘 해내야지
'code > [프로그래머스] python' 카테고리의 다른 글
[코딩 테스트 연습 입문] 합성수 찾기 (2) | 2022.12.26 |
---|---|
[코딩 테스트 연습 입문] 공 던지기 (0) | 2022.12.26 |
[코딩 테스트 연습 입문] 배열 회전시키기 (0) | 2022.12.25 |
[코딩 테스트 연습 입문] 구슬을 나누는 경우의 수 (0) | 2022.12.25 |
[코딩 테스트 연습 입문] 모스부호 (1) (0) | 2022.12.25 |