본문 바로가기
Algorithm

99클럽 코테 스터디 8일차 TIL - Check if Number Has Equal Digit Count and Digit Value (리트코드 2283 / JavaScript)

by 륜곰 2025. 4. 10.

오늘의 문제 링크

 

⭐ intro : 문제를 생각해나간 방식

해시테이블을 활용한 문제이다. 다만... 내가 사용한 방식이 해시테이블을 사용한 방식인지는 잘 모르겠다. 해당 문자를 전체 순회하면서 각 '인덱스'의 숫자가 몇번씩 존재하는지 묻는 문제이다. 예를들어 1210의 경우

  • num[0] 은 총 1번들어있다 : true
  • num[1]는 총 2번 들어있다 : true
  • num[2]는 총 1번 들어있다 : true
  • num[3]은 총 0번 들어있다 : true

이렇게 인덱스 번호에 해당하는 횟수랑 똑같으면 true를 반환하고, 하나라도 맞지 않는것이 있다면 false를 반환하게끔 하면 되는 문제이다.

 

⭐ 풀이과정

 이중 for문을 사용하면서 비교적 쉽게 풀었다. 먼저 for in문을 돌면서 각 자리의 인덱스 번호를 순회하였고, 그 인덱스 번호가 그 인덱스 번호의 value값과 동일하면 동일한 갯수만큼 value 변수에 값을 증가시키도록 만들었다. 이렇게 만들어진 결과값을 result[] 배열을 만들어준 후에 넣어주었다. 즉 해당 결과값은 num이 1210일 경우 [1, 2, 1, 0]값이 쌓이게 되고, 이 result[i]값과 num[i]값을 하나씩 비교해서 다른점이 있다면 booleanValue값을 증가시키도록 만들고, 최종 booleanValue 값에 하나도 있으면, 즉 1이상의 값이 들어와있다면 false라는 뜻이므로 모두 같으면 true, 아니면 false를 뱉도록 만들었다.

 

⭐ 제출답안

var digitCount = function(num) {
    const result = [];
    let booleanValue = 0;
    for (let i in num) {
        let value = 0;
        for (let j of num) {
            if (i === j) {
                value++;
            }
        }
        result.push(value);
        result[i] === Number(num[i]) ? null : booleanValue++;
    }
    return booleanValue > 0 ? false : true;
};

 

⭐ 공부했던 개념들

- 해시테이블