방명록
- 백준 11170번 - 0의 개수(C/C++)2025년 01월 17일 21시 30분 26초에 업로드 된 글입니다.작성자: 방세연
어려운 문제는 아니지만 숫자형 타입 값에서 특정 문자의 개수를 구하거나 특정 문자를 구해내고 싶을 때
이 글을 참고해보고 그 틀을 한번 확인해보면 좋을 듯 하다.
입력받은 N부터 M까지에 모두 포함된 '0'이라는 숫자를 찾는 간단한 문제다.
입력 첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 줄에는 N과 M이 주어진다. 1 ≤ T ≤ 20 0 ≤ N ≤ M ≤ 1,000,000 출력 각각의 테스트 케이스마다 N부터 M까지의 0의 개수를 출력한다.
#include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; int main() { int testcase; cin >> testcase; vector<int> vec(testcase); for (int i = 0; i < testcase; i++) { int N, M, sum = 0; cin >> N >> M; for (N; N <= M; N++) { string str = to_string(N); int zero = count(str.begin(), str.end(), '0'); sum += zero; } vec[i] = sum; } for (int i : vec) { cout << i << endl; } }
처음에는 10을 나눈 나머지가 0이라는 점을 이용해 연쇄적으로 답을 구해볼까 하였다.
그러나 반례로 105, 1086 ... 이런 숫자들은 0이 포함되어 있음에도 10으로 나눈 나머지가 0이 되지 않는다. 즉, 코드 작성이 더 복잡해진다는 이야기다.
1. 가장 쉽고 빠르게 풀기 위해서는 int 타입형을 string 문자열 형으로 변환해준다.
to_string(N) // 이때 N은 int 타입의 자료형
2. count() 함수를 사용해 방금 만든 string 형의 begin, end, '찾고싶은 문자'를 적어준다.
count(str.begin(), str.end(), '0')
이후 vector에 해당 값을 각각 넣어주어 답을 출력해주었다.
+ 만약 특정 문자를 다른 문자로 변환하고 싶다면?
int num = 10502030; string str = to_string(num); for (char &ch : str) { if (ch == '0') { ch = '*'; } }
이런 식으로 간단하게 변환도 가능하다. 혹은
replace(str.begin(), str.end(), '0', '*')
replace를 사용해 마지막 끝에 바꾸고 싶은 문자만 추가해주어도 좋다.
다음글이 없습니다.이전글이 없습니다.댓글