99클럽 코테 스터디 8일차 TIL + Check if Number Has Equal Digit Count and Digit Value(LeetCode 2283번)

2025. 4. 9. 13:57·항해99 코테

✅ 오늘의 학습 키워드

- 문자 → 정수 변환

이번엔 99 클럽 코테 스터디의 비기너 문제를 먼저 풀어보았다. 이 문제는 문자열의 각 위치와 그 위치에 있는 숫자 값 사이의 특별한 관계를 확인하는 것이었다.
(문제 링크 : https://leetcode.com/problems/check-if-number-has-equal-digit-count-and-digit-value/)


✅ 공부한 내용

문제 요약

  • 0부터 시작하는 인덱스 숫자로 구성된 문자열 num이 주어짐
  • 각 위치 i에 있는 숫자가 문자열 내에서 숫자 i가 나타나는 횟수와 일치하는지 확인
  • 모든 위치에서 이 조건이 충족되면 true, 아니면 false 반환

풀이 로직

1. 문자열의 각 인덱스 i에 대해 반복문을 실행한다.

2. 각 인덱스 i에 대해:

  • 숫자 i가 문자열 전체에서 몇 번 나타나는지 카운팅(cnt).
  • 이를 위해 두 번째 반복문(j)을 사용하여 문자열을 다시 순회한다.
  • num[j]가 숫자 i와 같은지 확인하고, 같다면 카운팅(cnt)를 증가시킨다.

3. 카운팅(cnt)이 끝나면, i번째 위치에 있는 숫자(num[i])가 세어진 카운팅(cnt)와 일치하는지 확인한다.

  • 일치하지 않으면, false를 반환.
  • 모든 위치에서 일치하면, true를 반환.

✅ 오늘의 회고

- 😳 어떤 문제가 있었고, 나는 어떤 시도를 했는지

처음에는 문제 이해가 쉽지 않았다.(영어..크흠..)

"숫자 i가 num[i]번 나타나야 한다" 라는 조건이 직관적으로 이해가 되지 않았다. 그리고 현재 숫자가 문자이기 때문에 이것을 숫자로도 바꿔야 하는 방법을 몰랐다. 

- 🤔 어떻게 해결했는지

문자를 정수로 바꾸는 방법을 찾아보았고 

문자를 정수로 변환할 때는 num [j] - '0' 방식을 활용해야 한다는 것을 알았다. 이는 문자의 ASCII 값 차이를 이용한 간단한 변환 방법이다.

(참고: https://velog.io/@haminggu/ASCII-%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C-%ED%91%9C%ED%98%84%EB%90%9C-%EC%88%AB%EC%9E%90%EB%A5%BC-%EC%A0%95%EC%88%98%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%A0-%EB%95%8C)

- 🤩 무엇을 새롭게 알았는지

1. 문자-숫자 변환: C++에서 문자를 숫자로 변환하는 간단한 방법은 해당 문자에서 '0'을 빼는 것이다. 이는 ASCII 코드 값의 차이를 이용한 것이다. stoi() 함수도 사용할 수있는데 ASCII코드 사용보다는 메모리 효율성이 떨어지지 않을까 싶다.


✅ 전체 코드

class Solution {
public:
    bool digitCount(string num) {

        for (int i = 0; i < num.size(); i++) {
            int cnt = 0;

            // 문자열에서 숫자 i가 나타나는 횟수 세기
            for(int j = 0; j < num.size(); j++){
                if(num[j] - '0' == i) { // 문자 -> 정수로 변환하려면 해당 문자에서 '0'을 빼면 됨.
                    cnt++;
                }
            }

            // 현재 위치의 숫자와 카운트 비교
            if (num[i] - '0' != cnt) {
                return false;
            }
        }

        return true;
    }
};

'항해99 코테' 카테고리의 다른 글

99클럽 코테 스터디 9일차 TIL + 저울(백준 2437번)  (0) 2025.04.10
99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지(백준 9996번)  (0) 2025.04.09
99클럽 코테 스터디 7일차 TIL + 쇠막대기(백준 10799번)  (0) 2025.04.08
99클럽 코테 스터디 6일차 TIL + 섬의개수(백준 4963번)  (0) 2025.04.07
99클럽 코테 스터디 5일차 TIL + 수열(백준 2559번)  (0) 2025.04.04
'항해99 코테' 카테고리의 다른 글
  • 99클럽 코테 스터디 9일차 TIL + 저울(백준 2437번)
  • 99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지(백준 9996번)
  • 99클럽 코테 스터디 7일차 TIL + 쇠막대기(백준 10799번)
  • 99클럽 코테 스터디 6일차 TIL + 섬의개수(백준 4963번)
탱도시락
탱도시락
  • 탱도시락
    코딩도시락
    탱도시락
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • CS50 (4)
      • 항해99 코테 (17)
      • C++ 코딩테스트 준비 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발자취업
    2진법
    컴퓨팅 사고력
    코딩테스트 문법
    컴퓨터과학
    코칭스터디 2기
    코딩테스트 합격자 되기
    99클럽
    코테
    Til
    아스키코드
    2차원 배열
    유니코드
    2진수
    알고리즘 효율 분석
    항해99
    Vector
    C++
    부스트코스
    CS50 코칭스터디 2기
    디지털윤리
    데이터 타입
    CS50
    배열의 효율성
    창작과모방
    코딩테스트
    James Cameron
    시간복잡도
    코딩테스트준비
    인간도 모델이다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
탱도시락
99클럽 코테 스터디 8일차 TIL + Check if Number Has Equal Digit Count and Digit Value(LeetCode 2283번)
상단으로

티스토리툴바