✅ 오늘의 학습 키워드
- 문자 → 정수 변환
이번엔 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 |