길이에 따른 연산

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.

제한사항

2 ≤ num_list의 길이 ≤ 20
1 ≤ num_list의 원소 ≤ 9

입출력 예

num_listresult
[3, 4, 5, 2, 5, 4, 6, 7, 3, 7, 2, 2, 1]51
[2, 3, 4, 5]120

입출력 예 설명

입출력 예 #1
리스트의 길이가 13이므로 모든 원소의 합인 51을 return합니다.
입출력 예 #2
리스트의 길이가 4이므로 모든 원소의 곱인 120을 return합니다.

💻 내가 작성한 코드(프로그래머스에 맞춰 변경)

function solution(num_list) {
    let add = 0;
    let mul = 1;
    let result = 0;
    
    for(let i in num_list){
        if(num_list.length >= 11){
            add += num_list[i]
            result = add
        }else{
            mul *= num_list[i]
            result = mul
        }
    }
    return result    
}

for문으로 num_list를 순회하고
만약 num_list.length의 길이가 11 이상인 경우
전부 더한 후 result라는 변수를 만들어줘
result에 해당 결과 값을 할당해 리턴해 주었다.

10이하인 경우도 동일하게 해주었다.

초반엔 변수를 하나만 선언해 주었다.
그랬더니 하나는 맞고 하나는 틀려서 그러면 두개의 변수를 선언하면 되겠다!...했지만
그럼 어떻게 조건을 줘야지? 고민을 하다 결과값을 넣어줄 변수를 하나 더 선언해 할당해 주는 방법으로 수정했다!

사실 reduce로 작성했는데 자꾸 통과가 되지 않아서 다시 풀었다ㅠ

💻 내가 작성한 코드(원래 풀었던)

num_list.reduce((acc, cur) => {
       if(num_list.length >= 11){
          return acc + cur
       }
      return acc * cur
})


reduce함수를 통해 좀더 깔끔하게 작성할 수 있었다.
처음에 작성한 코드가 틀린 줄 알고 콘솔창에 테스트 했지만
잘 나와서 뭐지..? 이러고 있었다..

왜 안 되는지 아시는 분... 댓글 좀..🥺
reduce메서드 앞에 return을 안 붙여서 그런게 아닐까 싶다...

reduce 작성 법

배열.reduce((누적값, 현재값, 인덱스, 요소) => {return}, 초기값)

✏️ 마치며

여러 방법을 생각해 풀어보려고 한다.

배열 등이 나왔을 때 무작정 for문으로 풀어보지 말고
map, reduce, filter, find 등의 메서드로 사용한 풀이도 해보자 하고 있다.

실무에서는 for문 보단 메서드를 이용해 사용하지 않을까 싶다.
.
.
.
처음 부터 난이도가 높은 문제를 풀어서 하기 싫고 무슨 뜻인지 몰랐는데
난이도를 낮춰 기초 부터 문제를 풀고 통과하니 재미 있고 흥미가 생긴다!

열심히 꾸준히 해보자!

참고

map, redue 메서드
https://www.zerocho.com/category/JavaScript/post/5acafb05f24445001b8d796d

profile
[프론트 애송이] 작은 깨달음도 기록하기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN