문제 : https://www.acmicpc.net/problem/5671
5671번: 호텔 방 번호
선영이는 집 호수에 반복되는 숫자가 있는 경우에는 그 집에 사는 사람에게 불운이 찾아온다고 믿는다. 따라서, 선영이는 838호나 1004호와 같이 한 숫자가 두 번 이상 들어있는 집에는 절대 살지
www.acmicpc.net
문제 요약 : 주어진 구간의 반복되는 숫자가 없는 수의 개수 출력
입력 | 출력 |
1 ≤ N ≤ M ≤ 5000 |
주어진 구간의 반복되는 숫자가 없는 수의 개수 |
JAVA
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_5671.java
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
30897530 | cbkpar | 5671 | 맞았습니다!! | 14932KB | 140ms | Java 11 | 876B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t,i,n,m;
String str;
int[] arr = new int[5001];
for(i=1;i<=5000;i++) {
boolean[] chk = new boolean[10];
t = i;
while(true) {
if(t==0) {
arr[i] = 1;
break;
}
if(chk[t%10]) break;
chk[t%10] = true;
t/=10;
}
}
for(i=2;i<=5000;i++) arr[i] += arr[i-1];
while((str=br.readLine())!=null) {
StringTokenizer st = new StringTokenizer(str);
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
sb.append((arr[m]-arr[n-1])+"\n");
}
System.out.println(sb);
}
}
1부터 5000까지 해당 숫자가 반복되는 숫자가 있는지 없는지 확인한다.
있을 경우 0, 없을 경우 1로 두며
1부터 N까지의 합을 arr[N]으로 만들어준다.
이때 n부터 m까지의 합은
(1부터 m까지의 합) - (1부터 n-1까지의 합) 이므로
arr[m] - arr[n-1] 값을 출력해주면 된다.
'백준온라인' 카테고리의 다른 글
[백준온라인] 11383번 뚊 (0) | 2021.07.18 |
---|---|
[백준온라인] 10570번 Favorite Number (0) | 2021.07.17 |
[백준온라인] 2697번 다음수 구하기 (0) | 2021.07.15 |
[백준온라인] 12760번 최후의 승자는 누구? (0) | 2021.07.14 |
[백준온라인] 5698번 Tautogram (0) | 2021.07.13 |