99클럽 코테 스터디 8일차 TIL + 문자열/해시

개발자 춘식이·2025년 4월 9일
0

항해99클럽

목록 보기
8/10

문제

LeetCode 2283-Check if Number Has Equal Digit Count and Digit Value

You are given a 0-indexed string num of length n consisting of digits.

Return true if for every index i in the range 0 <= i < n, the digit i occurs num[i] times in num, otherwise return false.

Constraints:

  • n == num.length
  • 1 <= n <= 10
  • num consists of digits.

예시

Example 1:

  • Input: num = "1210"
  • Output: true
  • Explanation:
    num[0] = '1'. The digit 0 occurs once in num.
    num[1] = '2'. The digit 1 occurs twice in num.
    num[2] = '1'. The digit 2 occurs once in num.
    num[3] = '0'. The digit 3 occurs zero times in num.
    The condition holds true for every index in "1210", so return true.

즉, 표로 정리하면 다음과 같다.

자리(i)num[i]의미
0번 자리'1'숫자 '0'은 1번 나와야 함
1번 자리'2'숫자 '1'은 2번 나와야 함
2번 자리'1'숫자 '2'는 1번 나와야 함
3번 자리'0'숫자 '3'은 0번 나와야 함

만족하므로 true이다.

Example 2:

  • Input: num = "030"
  • Output: false
  • Explanation:
    num[0] = '0'. The digit 0 should occur zero times, but actually occurs twice in num.
    num[1] = '3'. The digit 1 should occur three times, but actually occurs zero times in num.
    num[2] = '0'. The digit 2 occurs zero times in num.
    The indices 0 and 1 both violate the condition, so return false.
자리(i)num[i]의미
0번 자리'0'숫자 '0'은 0번 나와야 함
1번 자리'3'숫자 '1'은 3번 나와야 함
2번 자리'0'숫자 '2'는 0번 나와야 함

즉, false이다.

풀이

class Solution {
    public boolean digitCount(String num) {
        int[] count = new int[10]; // 숫자 0~9의 등장 횟수를 저장할 배열

        // 1단계: num 문자열을 순회하면서 각 숫자의 등장 횟수를 센다
        for (char c : num.toCharArray()) {
            int digit = c - '0';  // '3' 같은 문자 → 숫자 3으로 바꿔줌
            count[digit]++;       // 해당 숫자 등장 횟수 증가
        }

        // 2단계: num[i]와 실제 count[i]가 같은지 확인
        for (int i = 0; i < num.length(); i++) {
            int expected = num.charAt(i) - '0'; // num[i] → 기대되는 등장 횟수
            if (count[i] != expected) {
                return false; // 하나라도 틀리면 false
            }
        }

        return true; // 전부 통과하면 true
    }
}

회고

이번 문제는 문제 자체가 뭔 소리를 하나 싶어서 문제 이해에만 5분 넘게 사용한 것 같다..

profile
춘식이를 너무 좋아하는 주니어 백엔드 개발자입니다.

0개의 댓글