문제
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이 있는지 없는지 체크하는 문제이다.
- 확인해야 할 범위의 수인 n번만큼 반복문을 돌려준다.
- cnt는 범위 안에 있는 0의 수이다. 범위마다 세야하기 때문에 i가 바뀔 때마다 0으로 초기화해준다.
- StringTokenizer를 통해 한줄에 들어온 숫자 두개를 나눠준다.
- 시작부터 끝까지 나눠준 숫자를 통해 반복문을 돌린다.
- 이때 조심해야할 점은 한 숫자에 0이 포함되었느냐가 아니라 숫자 안에 0이 몇개 포함되었느냐이다.
- 숫자를 문자열로 바꾸어 길이만큼 반복문을 돌린다.
- 바꾼 문자열을 하나씩 체크하여 0이 있을 때마다 cnt를 증가시킨다.
처음에는 단순히 contains만 사용해서 0이 들어있으면 증가했는데 실패했다. 그래서 다시 확인해보니 총 0의 개수를 찾는 문제였다. 이점 말고는 주의할 점이 크게 없는 것 같다. contains를 활용하면 반복문을 덜 돌릴 수도 있을 것 같다.
'백준-단계별문제풀이' 카테고리의 다른 글
2338번 - JAVA (0) | 2022.03.13 |
---|---|
2751번 - JAVA (0) | 2022.03.06 |
2588번 - C++ (0) | 2021.05.04 |