2024.08.16 TIL - 프로그래머스 풀이 (누적값 구하는법, reduce 초기값, 문자를 숫자로 바꾸기)

Innes·2024년 8월 16일
0

TIL(Today I Learned)

목록 보기
146/147
post-thumbnail

프로그래머스 풀이

짝수의 합

  • 내 풀이 : 누적값구하기는 무조건 reduce라고 생각했다.
const solution = (n) => {
    // n 이하의 모든 짝수를 배열로 만들기 - for문
    // 배열.reduce로 누적값 구하기
    
    let arr = [];
    for (let i = 1; i <= n; i++){
        if(i % 2 === 0){
            arr.push(i)
        }
    }
    
    const answer = arr.reduce((acc, cur) => acc + cur, 0)
    return answer;
}
  • 오류 해결

    • 처음엔 reduce에 초기값을 설정하지 않았더니 실행 결과 중 '런타임 에러'가 발생하며 오답처리가 되었다.
    • 원인은 초기값을 세팅하지 않아서 발생한 문제였다.

      reduce 메서드에서 '초기값'이란?

      • 배열 누적값 구할 때 맨 처음의 값을 의미
      • 명시해두지 않으면 기본적으로 배열의 첫 값이 기본으로 초기값으로 설정됨


        '초기값' 설정이 필요한 이유?!
      • 빈 배열에 대해 reduce를 호출하면, 초기값이 없을 때 오류가 발생
  • 다른 풀이

1) += 연산자 활용!

function solution(n) {
    let answer = 0
    for (let i = 1; i <= n; i++) {
        if (i % 2 === 0) {
            answer += i            
        }
    }
    return answer
}

2) for문에서 ++i가 아닌, i+=2 활용!

function solution(n) {
    var answer = 0;

    for(let i=2 ; i<=n ; i+=2)
        answer += i;

    return answer;
}

배열의 평균값

  • 내 풀이 : 사실 이게 근본 풀이일 듯
const solution = (numbers) => {
    // 배열의 값들 다 더하기
    // 배열 값 개수로 나누기
    
    let sum = 0;
    for (let i = 0; i < numbers.length; i++){
        sum += numbers[i];
    }
    
    const answer = sum / numbers.length
    return answer;
}

다른 사람 풀이 보니까 이번엔 또 reduce 쓰는게 더 효율적이었네.... ^^....

  • 내 풀이 2) reduce 활용하기 (길지만 한 줄로 끝내기 가능)
// 한 줄 풀이
const solution = (numbers) => numbers.reduce((acc,cur) => acc + cur, 0) / numbers.length

// 한 줄이 너무 길다면
const solution = (numbers) => {
    return numbers.reduce((acc,cur) => acc + cur, 0) / numbers.length
}

자릿수 더하기

  • 내 풀이 1차 시도
    • 처음엔 for 문으로 돌아야하나 고민했는데, 문자열 자르는 메서드도 모르겠고 for문 돌면서 전부 다 숫자로 바꾸고 더하고 할 생각을 하니 아찔해져서 결국 검색 찬스를 썼다.
const solution = (N) => {
    // 숫자 -> 문자열로 만들기
    // 문자열 자르기
    // 숫자로 만들어서 누적값 구하기 (reduce)
    
    return String(N).split('').reduce((acc, cur) => parseInt(acc) + parseInt(cur), 0)
}
  • 리팩토링(?) !

    • acc값은 초기값이 0으로 세팅되어있기에, cur를 숫자로 지정한 후로는 두번째 누적값부터는 무조건 숫자일 수 밖에 없음!
    • 문자열을 숫자로 만드는 간단한 방법 : 문자열 앞에 + 붙여주기! (or *1 )
  • 최종 풀이

const solution = (N) => {
    // 숫자 -> 문자열로 만들기
    // 문자열 자르기
    // 숫자로 만들어서 누적값 구하기 (reduce)
    
    return String(N).split('').reduce((acc, cur) => acc + +cur, 0)
}
profile
무서운 속도로 흡수하는 스폰지 개발자 🧽

0개의 댓글