STUDY.md
  • 백준 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를 사용해 마지막 끝에 바꾸고 싶은 문자만 추가해주어도 좋다.

    댓글