connecting dots

프로그래머스 | 짝수의 합, 배열의 평균값, 짝수와 홀수, 평균 구하기, 자릿수 더하기 본문

Coding Test

프로그래머스 | 짝수의 합, 배열의 평균값, 짝수와 홀수, 평균 구하기, 자릿수 더하기

dearsuhyun 2024. 6. 16. 17:00

 

1. 짝수의 합

# 문제 설명

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

 

# solution.js

function solution(n) {
	let sum = 0;
	for (let i = 0; i <= n; i += 2) {
    	sum += i;
	} return sum
}
solution(60)
let sum = 0  sum이라는 변수 만들어서 더한 값 저장할 수 있게 함
for 문 0부터 시작, 인수 n보다 작거나 같아야 하는 것이 조건이고
0부터 2씩 더한다는 뜻. 
sum += i 그 i의 값을 sum에 더해서
return sum solution 함수가 실행되면 sum 값을 반환함

 

2. 배열의 평균값

# 문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

 

# solution.js

1) reduce

function solution(numbers) {
    const sum = numbers.reduce((total, num) => {
        return total + num})
        const avr = sum / numbers.length
        return avr
}
numbers가 배열로 들어오니까 따로 배열 세팅은 안해도 되는 것 const sum = numbers.reduce((total, num) 
합을 먼저 구할거니까 인수 이름 그냥 total, num으로
{return total + num)} total에 num 더한 것을 다시 total로 보내줘서
반복이 끝날 때 까지 진행, 최종 값은 sum에 저장
const avr = sum / numbers.length 결과적으로 평균을 구해야 하니
sum을 number.length로 나눠줌
return avr 평균값 출력

 

2) for

function solution(numbers) {
    let sum = 0;
    for(let i = 0; i < numbers.length; i++) {
        sum += numbers[i];
    }
    const length = numbers.length
    const avr = sum / length
    return avr
}

 

for(let = 0; i  < numbers.length; i++) i는 0부터 시작, 배열은 0부터 시작하니까 i는 배열의 길이보다 작게
i++ 해서 i에 1씩 더해줌
sum += numbers.[i] sum 변수에 numbers의 각 항목을 0부터 배열길이-1 까지 더해줌
이하는 평균 구하기, const length에 numbers.length 저장해서 avr 정리 조금 더 깔끔하게

 

주의) return 사용에 대한 for 루프와 reduce 루프 차이

for 루프 내부에서 return을 사용하면 첫 번째 반복에서 함수가 종료되므로, 루프 외부에서 return을 사용해야 합니다.

for 루프 내부에서는 합계를 계산하고, 루프 외부에서 평균값을 계산하여 반환합니다.

reduce 메서드는 콜백 함수 내에서 return을 사용하여 값을 누적할 수 있습니다.

 

3) forEach()

forEach()가 붙어있는 배열 데이터의 아이템 개수만큼 인수로 사용된 콜백함수가 반복적으로 실행됨

실행될 때 마다 index의 값이 0부터 하나씩 증가함

 

function solution(numbers) {
    let sum = 0;
    numbers.forEach(function (num) {
                    return sum += num
                    })
    const length = numbers.length
    const avr = sum / length
    return avr
}
numbers.forEach(function (num) {
return sum += num})
forEach와 콜백함수 이용해서 sum에 num을 더한 값 return

 

 

3. 짝수와 홀수

# 문제 설명

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

 

# solution.js

1) if 조건문

function solution(num) {
    if (num % 2 === 0) {
        return 'Even'
    } else {
        return 'Odd'
    }
}
solution (60)

 

2) 삼항 연산자

function solution(num) {
    const number = num % 2 === 0 ? 'Even' : 'Odd'
    return number
}

 

 

4. 평균 구하기

# 문제 설명

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요

 

# solution.js

function solution(arr) {
    let sum = 0;
    for (let i = 0; i < arr.length; i++) {
        sum += arr[i]
    }
    const length = arr.length
    const avr = sum / length
    return avr;
}

 

5. 자릿수 더하기

# 문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

# solution.js

function solution(n) {
    
const number = n;
const numberArray = number.toString().split('').map(Number);

const sum = numberArray.reduce((a, b) => a + b)

return sum
}

solution(99)
N이 123일 때 1+2+3이 되어야 하기 때문에 숫자를 배열로 바꿔서 배열 안의 숫자들을 다 더하는 느낌으로 문제해결을 하고 싶었음

숫자를 배열로 바꾸는 방법 ???
--> number.toString()으로 숫자를 문자열로 바꾼 후
--> .split('')로 문자열을 각 문자로 분리하여 배열로 만듬

문자를 다시 숫자로 만들어야 더할 수 있네 ??
--> .map(Number)로 각 문자를 숫자로 변환

모든 숫자를 더하기 위해 reduce 사용

 

- 숫자를 배열로 변환

number.toString

const number = 12345; // 예시 숫자
const numberArray = number.toString().split('').map(Number);

console.log(numberArray); // [1, 2, 3, 4, 5]

number.toString() : 숫자를 문자열로 변환합니다.

.split('') : 문자열을 각 문자로 분리하여 배열로 만듭니다.

   "12345"["1", "2", "3", "4", "5"]로 변환됩니다.

map(Number) : 각 문자를 숫자로 변환합니다.

 

- 배열의 모든 요소를 합산

numberArray.reduce((a,b) => a + b);

const sum = numberArray.reduce((acc, curr) => acc + curr, 0);

console.log(sum); // 15

 

# 다른사람의 풀이

function solution(n){
    return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}

 

n + ""

숫자 n을 문자열로 변환합니다.

예를 들어, n이 12345이면, 이를 "12345"로 변환합니다.

숫자와 빈 문자열을 더하면 자동으로 숫자가 문자열로 변환됩니다.

 

.reduce((acc, curr) => acc + parseInt(curr), 0)

reduce 메서드는 배열의 각 요소를 누적(accumulate)하여 하나의 값으로 만듭니다.

첫 번째 인자는 누적 값 acc (accumulator)입니다.

두 번째 인자는 현재 처리 중인 배열 요소 curr (current value)입니다.

parseInt(curr)는 현재 요소를 문자열에서 정수로 변환합니다.

acc + parseInt(curr)는 누적 값에 현재 요소를 더합니다.

0은 초기 값입니다. 즉, 누적이 시작될 때의 값입니다.

 

스터디 피드백

// 숫자를 문자열로 바꿀 수 있음
String(n)
n.toString()
n+""

// 문자가 숫자로 변함
+"1"

 

슈도코드 활용해보기

https://ittrue.tistory.com/98

 

[CS] 의사코드의 개념과 작성법 (슈도코드, Pseudo-code)

의사코드 (슈도코드, Pseudo-code) 의사코드는 프로그래밍 언어를 코드로 작성하기 전에, 무엇을 어떻게 동작하도록 자성할 지에 대하여 사람이 이해할 수 있는 언어로 작성하는 것이다. 의사코드

ittrue.tistory.com

 

 

반응형