본문 바로가기
Online-Judge/Baekjoon

[Baekjoon] C++ 11170번 0의 개수

by eungbbang 2022. 1. 9.
반응형

https://www.acmicpc.net/problem/11170

 

11170번: 0의 개수

N부터 M까지의 수들을 종이에 적었을 때 종이에 적힌 0들을 세는 프로그램을 작성하라. 예를 들어, N, M이 각각 0, 10일 때 0을 세면 0에 하나, 10에 하나가 있으므로 답은 2이다.

www.acmicpc.net

 

 


 

1. 테스트 케이스의 개수 t를 입력 받는다.

이후 while문을 한 번 돌 때마다 t의 개수를 하나씩 줄이며 t가 0이 될 때까지 반복한다.

int t = 0;
cin >> t;

while(t--){
	//여기에 알고리즘 작성
}

 

 

2. n과 m을 입력 받은 뒤, 0의 개수를 담을 cnt 변수를 선언해준다.

int n = 0, m = 0;
cin >> n >> m;

int cnt = 0;

 

 

3. n부터 m까지의 숫자를 모두 확인해야 하므로 for문의 범위를 n부터 m보다 작거나 같을 때로 설정해준다.

for (int i = n; i <= m; i++) {
	//n부터 m 사이의 숫자를 체크
}

 

 

4. 해당 숫자에 0이 있는지 확인하는 방법에는 여러가지가 있지만, 그 중 간단히 모든 자리를 체크하며 해당 자리에 0이 있는지 확인하는 방법이 있다.

따라서 숫자 i를 string으로 변환한 뒤, 가장 앞의 자리부터 문자 '0'과 같으면 cnt의 수를 하나 추가한다.

 

int를 string으로 변환하기 위해서는 <string> 헤더에 있는 to_string을 사용하면 간편하다.

string now = to_string(i);

for (int j = 0; j < now.size(); j++) {
	if (now[j] == '0') cnt++;
}

 

 

5. 마지막으로 갯수를 출력해준다.

cout << cnt << endl;

 

 


[전체 코드]

#include <iostream>
#include <string>
using namespace std;

int main() {

	int t = 0;
	cin >> t;

	while (t--) {

		int n = 0, m = 0;
		cin >> n >> m;

		int cnt = 0;
		for (int i = n; i <= m; i++) {
			
			string now = to_string(i);

			for (int j = 0; j < now.size(); j++) {
				if (now[j] == '0') cnt++;
			}
		}
		cout << cnt << endl;
	}
}
반응형

댓글