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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바