문제 내용은 입력으로 두 수를 받은 뒤, 왼쪽부터 오른쪽 수 까지 1씩 올려가면서 각 수를 쪼갰을 때 겹치지 않는 숫자의 갯수가 몇개인지를 출력해주어야 하는데
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
int[] target = Arrays.stream(input.split(" ")).mapToInt(Integer::parseInt).toArray();
int ans = 0;
for (int i = target[0]; i <= target[1]; i++) {
int val = i;
boolean duplicate = false;
boolean[] arr = new boolean[10];
while (val > 0) {
int calc = val % 10;
if (arr[calc]) {
duplicate = true;
break;
}
arr[calc] = true;
val /= 10;
}
if (!duplicate) {
ans++;
}
}
System.out.println(ans);
}
}
}
먼저, 입력에 몇 개를 넣는다는 지침이 없으므로 while에서 input이 null이면 중단시키면 되고, 이후 로직을 구성해주면 되는데 일단 숫자를 왼쪽부터 오른쪽까지 진행해주되 1씩 올려가며 진행 시 숫자를 또 쪼개서 사용하면 로직 상 문제는 없지만 메모리 문제가 발생하기 때문에
%를 사용해주면 10단위씩 줄여주여 중복을 체크해줄 수 있다, boolean 배열로 0-9까지 만든 뒤, 각 숫자가 나오면 true, 이 상태에서 한번 더 걸리면 반복문 중단하고 boolean duplicate를 true 처리한 뒤, 반복문 밖에서 duplicate가 false일 경우에만 1씩 올려주며, 수를 모두 체크해준 뒤 겹치지 않는 값 갯수를 출력해주면 되는데, 풀이 자체는 무난하게 진행할 수 있지만 난데없는 메모리 문제에 걸리기 쉽기 때문에 이걸 조심해줘야 한다.
Leave a Reply