Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

아보카도 Blog

프로그래머스 스쿨 코딩테스트 입문: 2차원으로 만들기 본문

자료구조, 알고리즘

프로그래머스 스쿨 코딩테스트 입문: 2차원으로 만들기

수수 아보카도 2022. 12. 14. 23:32

문제 출처

 

프로그래머스

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

programmers.co.kr

문제를 보려면 더보기를 클릭

더보기

문제 설명

정수 배열 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]]

 

 

배열 안에 배열을 만들어야 하는데,

처음부터 그렇게 시작하기 보다는,

리턴 값을 평범한 배열로 두고, 그 안에 반복문을 사용해서 배열을 쌓아가는 것으로 접근하자.

일단 8 // 2 = 4처럼 len(num_list)를 n값으로 나누어 보아야 한다.

그리고 그 만큼의 범위만큼 반복하기.  for i in range(len(num_list)//n):

주의해야 할 점은 [a:b] 범위에서 b는 포함되지 않는다는 것이다. 즉 a이상 b미만이다.

그리고 얻은 값을 answer에 append해주기.

def solution(num_list, n):
    answer = []
    for i in range(len(num_list)//n):
        answer.append(num_list[i*n : (i+1)*n])
    return answer

 

 

두번째 방법은 배열 안의 배열을 temp로 저장해준 후,

이곳에서 반복문을 실행하여 append 후, answer에 또 append 해주기.

이때 cnt라는 변수를 설정하여 cnt++를 해주면서 cnt가 n과 같아질 때까지 반복해주는 것이 중요하다.

반복이 끝나면 cnt와 temp를 초기화해주는 것도 잊지 말 것!

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

    for i in num_list:
        temp.append(i)
        cnt += 1
        if cnt == n:
            answer.append(temp)
            # 초기화
            temp = []
            cnt = 0
    return answer