본문 바로가기

백준-단계별문제풀이

11170번 / Java

문제

N부터 M까지의 수들을 종이에 적었을 때 종이에 적힌 0들을 세는 프로그램을 작성하라.

예를 들어, N, M이 각각 0, 10일 때 0을 세면 0에 하나, 10에 하나가 있으므로 답은 2이다.

 

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 줄에는 N과 M이 주어진다.

  • 1 ≤ T ≤ 20
  • 0 ≤ N ≤ M ≤ 1,000,000

 

출력

각각의 테스트 케이스마다 N부터 M까지의 0의 개수를 출력한다.

 

예제 입력 1

3
0 10
33 1005
1 4

 

예제 출력 1

2
199
0

 

 

 


 

 

정답 코드

import java.io.*;
import java.util.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        
        for(int i=0; i<n; i++){
            int cnt = 0;
            StringTokenizer st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());

            for(int j=start; j<=end; j++){
                for(int k=0; k<String.valueOf(j).length(); k++){
                    if(String.valueOf(j).charAt(k) == '0') cnt++;
                }
            }
            System.out.println(cnt);
        }
    }
}

 

 

 


지정된 범위 안에서 0이 있는지 없는지 체크하는 문제이다. 

 

  1. 확인해야 할 범위의 수인 n번만큼 반복문을 돌려준다.
    1. cnt는 범위 안에 있는 0의 수이다. 범위마다 세야하기 때문에 i가 바뀔 때마다 0으로 초기화해준다.
    2. StringTokenizer를 통해 한줄에 들어온 숫자 두개를 나눠준다. 
  2. 시작부터 끝까지 나눠준 숫자를 통해 반복문을 돌린다.
    1. 이때 조심해야할 점은 한 숫자에 0이 포함되었느냐가 아니라 숫자 안에 0이 몇개 포함되었느냐이다.
    2. 숫자를 문자열로 바꾸어 길이만큼 반복문을 돌린다.
      1. 바꾼 문자열을 하나씩 체크하여 0이 있을 때마다 cnt를 증가시킨다. 

 

 


 

 

 

처음에는 단순히 contains만 사용해서 0이 들어있으면 증가했는데 실패했다. 그래서 다시 확인해보니 총 0의 개수를 찾는 문제였다. 이점 말고는 주의할 점이 크게 없는 것 같다. contains를 활용하면 반복문을 덜 돌릴 수도 있을 것 같다.

 

 

 

 

11170번: 0의 개수

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

www.acmicpc.net

 

'백준-단계별문제풀이' 카테고리의 다른 글

2338번 - JAVA  (0) 2022.03.13
2751번 - JAVA  (0) 2022.03.06
2588번 - C++  (0) 2021.05.04