책만 읽기 심심해서 프로그래머스 사이트에 있는 연습문제들을 풀면서 공부하기로 했다.










1. 짝수와 홀수


  • 문제 설명


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



  • 제한 조건


num은 int 범위의 정수입니다.

0은 짝수입니다.



  • 입출력 예


num return
3 “Odd”
4 “Even”



function solution(num) {
    let answer = '';
    num = Number(num);
    absNum = Math.abs(num);
    if (!isNaN(absNum) && absNum % 2 === 0) { // 짝수일 경우
        answer = 'Even';
    } else if (!isNaN(absNum) && absNum % 2 === 1) { //홀수일 경우
        answer = 'Odd';
    } else {
        answer = 'Error!'
    }
    return answer;
}


처음엔 위와 같이 작성했는데, 제한 조건이 있는데 예외를 왜 넣었나 싶다.

그래서 아래와 같이 수정함.


function solution(num) {
    return Math.abs(num) % 2 ? 'Odd' : 'Even';
}


Math.abs()를 쓴건 음수때문에.










2. 자릿수 더하기


  • 문제 설명


자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.



  • 제한사항


N의 범위 : 100,000,000 이하의 자연수



  • 입출력 예


N answer
123 6
987 24
  • 입출력 예 설명


– 입출력 예 #1

문제의 예시와 같습니다.


– 입출력 예 #2

9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.



function solution(n)
{
    let answer = 0;
    for (const element of String(n)) {
        answer += Number(element);
    }
    return answer;
}


처음에는 위와 같이 작성했다.

당장 생각나는 게 for문밖에 없어서..

그리고 다시 아래와 같이 줄여보았다.


function solution(n)
{
    return (n + '').split('').reduce((acc, item) => acc + Number(item), 0);
}


숫자를 문자로, 문자를 배열로 만들고 배열의 각 값을 더해줬다.

나중에 다른 답을 보니 spread 구문 [...(n + '')] 으로 배열로 만들고

Number()ParseInt() 대신 item에 * 1 해서 형변환을 하기도 하더라.

새로운 방법을 배웠다.










3. 약수의 합


  • 문제 설명


정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.



  • 제한 사항


n은 0 이상 3000이하인 정수입니다.



  • 입출력 예


n return
12 28
5 6
  • 입출력 예 설명


– 입출력 예 #1

12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.


– 입출력 예 #2

5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.



약수…? 약수우…?

얼마만에 들어보는 단어인지.

약수가 뭔지 찾아보기까지 했다.


약수 : 어떤 자연수를 나누어떨어지게 하는 수. 어떤 수의 약수에는 1과 자기 자신이 항상 포함된다.


음… 숫자를 돌면서 나눈 나머지가 0이 되면 될 것 같다.


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


아래는 한줄이라도 줄여보려고 노력한 흔적…


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