LeetCode - 2843. Count Symmetric Integers

henu·2023년 11월 30일
0

LeetCode

목록 보기
144/186

Solution

var countSymmetricIntegers = function(low, high) {
    let count = 0

    for(low; low <= high; low++) {
        const str = [...(low + '')]

        if(str.length % 2) continue

        else {
        const n = str.length / 2

        str.slice(0, n).reduce((acc, cur) => acc + +cur, 0)
        === str.slice(n).reduce((acc, cur) => acc + +cur, 0) ? count++ : null

        }
    }

    return count
};

Explanation

이 문제는 큰 어려움 없이 요구 사항대로 코드를 작성해서 해결할 수 있었다.
1. 카운팅한 결과를 기록할 count변수를 선언한다.
2. low부터 high까지 for문을 이용해서 순회한다.
3. 숫자 타입은 분리할 수 없기 때문에 문자열로 변환 후 배열로 변환한다.
4. reduce 메소드를 이용해서 전반과 후반의 자릿수의 합을 각각 구한 후 비교해서 같을 경우 count를 1 증가시킨다.
하지만 첫 시도에는 통과되지 않았다. 그 이유를 곰곰이 생각해보니 범위가 넓어질수록 시간이 너무 오래걸린다는 것이다. 범위 내의 모든 숫자를 일일이 변환하고 확인하기 때문이다.
해답은 자릿수가 짝수인지 홀수인지 확인하는 것이다.
자릿수가 홀수인 수는 확인할 필요가 없는 수이다. 반반으로 분리되지 않기 때문이다.
그래서 자릿수의 홀짝을 판별하는 코드를 3, 4번 사이에 추가해서 해결했다.

0개의 댓글