Suzie's Blog

[프로그래머스] 배열의 원소만큼 추가 본문

개발/코딩테스트

[프로그래머스] 배열의 원소만큼 추가

Iuna 2023. 9. 4. 11:25
반응형
SMALL
문제 설명
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 `arr`가 매개변수로 주어질 때, `arr`의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를ㄹ return 하는 solution함수를 작성해 주세요.

 

제한사항
 1 ≤ arr의 길이 ≤ 100
 1 ≤ arr의 원소 ≤ 100

입출력 예
arr result
[5, 1, 4] [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]
[6, 6] [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
[1] [1]


입출력 예 설명

입출력 예 #1

예제 1번에 대해서 a와 X를 나타내보면 다음 표와 같습니다.
a X
  []
5  [5, 5, 5, 5, 5]
1   [5, 5, 5, 5, 5, 1]
4 [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]

따라서 [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]를 return 합니다.

입출력 예 #2

예제 2번에 대해서 a와 X를 나타내보면 다음 표와 같습니다.

a X
  []
6 [6, 6, 6, 6, 6, 6]
6 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]

따라서 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]를 return 합니다.

입출력 예 #3

예제 2번에 대해서 a와 X를 나타내보면 다음 표와 같습니다.
a X
  []
1  [1]

따라서 [1]을 return 합니다.

나의 풀이

const solution = arr => {
    const result = [];
    
    for(let i=0; i<arr.length; i++){
        for(let j=0; j<arr[i]; j++){
        result.push(arr[i])
        }
    }
    return result
}

지금 답을 보니 아주 간단하지만 은근히 푸는데 애를 먹었던 문제이다.

 

처음 접근을 map으로 시도했고 repeat() method를 이용하여 문제를 풀었다.

하지만 숫자가 한자리 수면 가능하지만 두자리 이상일 경우 문제가 생간다는걸 발견했다

 

일단 위의 풀이를 설명하자면

 

빈 배열 result를 생성해주고

 

for문을 한번 arr의 길이만큼 돌려준다. 예를들어 arr = [11, 11, 1]이라면 총 3번 반복

그 안에서 for문을 한번 더 돌려준다. 이번엔 arr의 각 원소에 명시된 길이만큼!

그럼 첫번째 인덱스의 값인 11이 총 11번 반복문을 돌것이다.

이때 빈배열 result에 arr 해당 인덱스의 값을 반복적으로 넣어주면

아래와 같은 결과가 나올것이다

[ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1 ]

11 열한번 *2 + 1 한번

 

인상 깊었던 다른 사람의 풀이

function solution(arr) {
    return arr.reduce((list, num) => [...list, ...new Array(num).fill(num)], []);
}

이 코드는 이해가 잘 안가는데 혹시 이해 가시고 설명 가능하시면 댓글 부탁드립니다 ㅠㅠ

반응형
LIST