아직은 푼 사람이 많은 문제부터, 내가 모르는 문법은 필요없을 듯한 문제부터 시간이 날 때 풀고 있다.

 

 - 문제 설명 : 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 return하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

 - 제한 조건

 1. a와 b가 같은 경우는 둘 중 아무 수나 return하세요.

 2. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.

 3. a와 b의 대소 관계는 정해져 있지 않습니다.

 

 - 입출력 예

a b return
3 5 12
3 3 3
5 3 12

 

 - 나의 풀이

function solution(a, b) {
    if (Math.abs((a-b)%2) === 1) {
        var add = (a+b)*(Math.abs(a-b)/2+0.5);
        return add;
    } else if (Math.abs((a-b)%2) === 0) {
        var add = (a+b)*Math.abs(a-b)/2 + (a+b)/2;
        return add;
    } else if (a === b) {
        return a;
    }
}

단순하게 모든 경우의 수를 고려했고 이번엔 Math를 사용했다.

 

a와 b를 빼서 홀수가 나온다면, a와 b사이에는 짝수 갯수의 숫자가 존재한다는 것이다. 예를 들어 a=3, b=8일 때, a-b는 절대값으로 5이며 그 사이에는 4, 5, 6, 7와 같이 4개로 짝수 갯수의 숫자가 존재한다. 그러면 맨 끝자리 3과 8을 더해주고, 이를 전체 갯수를 2로 나눈 만큼 곱해주면 된다. 전체 갯수는 (a-b)/2+0.5로 구해주면 된다.

 

a와 b를 더해서 짝수가 나온다면, a와 b사이에는 홀수 갯수의 숫자가 존재한다는 것이다. 예를 들어 a=3, b=7일 때, a-b는 절대값으로 2이며 그 사이에는 4, 5, 6와 같이 3개로 홀수 갯수의 숫자가 존재한다. 그러면 맨 끝자리 3과 7를 더해주고, 이를 전체 갯수를 2로 나눈 만큼 곱해주면 된다. 전체 갯수는 (a-b)/2로 구해주면 된다. 그 이후 중간 숫자 5가 남게 되는데, 이는 (a+b)/2이다. 이를 마지막에 더해주면 된다.

중간 숫자인 5가 남는다.

 

그리고 a와 b가 같은 숫자일 때는 단순하게 a가 출력되도록 했다.

'프로그래밍 > 프로그래머스 코딩테스트' 카테고리의 다른 글

짝수와 홀수  (0) 2021.12.03

바닐라코딩 프렙 가이드로 프로그래머스에 입문했는데 매일 1문제씩이라도 풀어주면 좋을 것 같다.

 

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

 

- 제한 조건

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

2. 0은 짝수입니다.

 

- 입출력 예

num return
3 'Odd'
4 'Even'

 

- 나의 풀이

function solution(num) {
    if ((num%2 === 0) || (num%2 === -0)) {
        return 'Even';
    } else if((num%2 === 1) || (num%2 === -1)) {
        return 'Odd';
    }
}

처음엔 좀 raw하게 작성했다. Math를 처음엔 되도록 쓰지 않는게 좋다고 해서 그랬다. 그리고 int형이라서 -0과 -1이 나머지가 될 수 있다는 것을 간과하기도 했었다.

 

*int형 : 정수형이고 값의 범위는 –2,147,483,648 ~ 2,147,483,647까지이다.

 

function solution(num) {
    if (Math.abs(num)%2 === 0) {
        return 'Even';
    } else if (Math.abs(num)%2 === 1)  {
        return 'Odd';
    }
}

위는 Math.abs를 사용했다. 이는 괄호 안의 수를 절대값으로 치환해주는 함수이다.

 

console.log(Math.abs(0)); // 0
console.log(Math.abs('')); // 0
console.log(Math.abs([])); // 0 
console.log(Math.abs(null)); // 0
console.log(Math.abs({})); // NaN
console.log(Math.abs([1, 2])); // NaN
console.log(Math.abs('abc')); // NaN
console.log(Math.abs()); // NaN

특이점으로, Math.abs()에서 ()안에  null, '' 혹은 []과 같은 빈 배열이 오면 0을 반환한다. 그리고 [1, 2]과 같은 배열, 'abc'와 같은 문자열, {}과 같은 빈 객체(혹은 중괄호), ()과 같은 아예 빈 값이 오면 NaN을 반환한다.

'프로그래밍 > 프로그래머스 코딩테스트' 카테고리의 다른 글

두 정수 사이의 합  (0) 2021.12.07

+ Recent posts