[문제]
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN
이전에 셌던 번호들의 각 자리수에서 0에서 9까지의 모든 숫자를 보는 것은 최소 몇 번 양을 센 시점일까?
예를 들어 N = 1295이라고 하자.
첫 번째로 N = 1295번 양을 센다. 현재 본 숫자는 1, 2, 5, 9이다.
두 번째로 2N = 2590번 양을 센다. 현재 본 숫자는 0, 2, 5, 9이다.
현재까지 본 숫자는 0, 1, 2, 5, 9이다.
세 번째로 3N = 3885번 양을 센다. 현재 본 숫자는 3, 5, 8이다.
현재까지 본 숫자는 0, 1, 2, 3, 5, 8, 9이다.
네 번째로 4N = 5180번 양을 센다. 현재 본 숫자는 0, 1, 5, 8이다.
현재까지 본 숫자는 0, 1, 2, 3, 5, 8, 9이다.
다섯 번째로 5N = 6475번 양을 센다. 현재 본 숫자는 4, 5, 6, 7이다.
현재까지 본 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9이다.
5N번 양을 세면 0에서 9까지 모든 숫자를 보게 되므로 민석이는 양 세기를 멈춘다.
[풀이]
N을 문자열로 입력 받았다.
크기가 10인 num 배열을 생성해 문자열 N에 포함된 문자를 int형으로 바꾼 뒤 그 숫자를 인덱스로 하여 해당 인덱스의 num 배열 값을 true로 바꿔주었다.
이 방법으로 현재 본 숫자를 기록하였다.
이때 num 배열값이 모두 true가 되면 0부터 9까지의 수를 모두 보게 되는 것이다.
[코드]
package A0222;
import java.io.*;
public class SWEA_양세기 {
static String N;
static int n;
static boolean isAllTrue(boolean[] arr) { // 0에서 9까지 모든 숫자를 보게 되는지 확인
for(int i=0;i<arr.length;i++) {
if(arr[i]!=true) return false;
}
return true;
}
public static void main(String[] args) throws Exception {
//System.setIn(new FileInputStream("input_1288.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int tc=1;tc<=T;tc++) {
boolean[] num = new boolean[10];
N = br.readLine();
int cnt=1;
n = Integer.parseInt(N);
int k=1;
while(true) {
int m=0;
m=n*k;
N = Integer.toString(m);
for(int i=0;i<N.length();i++) {
num[N.charAt(i)-'0']=true;
}
if(isAllTrue(num)) break;
k++;
cnt++;
}
System.out.println("#"+tc+" "+cnt*n);
}
}
}
[느낀점]
1N, 2N, 3N 이렇게 변화하는 값을 처리하는 방법을 생각해내는게 어려웠다. 지금 내가 쓴 방법 말고 다른 좋은 방법이 분명히 있을 것 같은데,, 찾아봐야겠다.
char 형을 int형과 비교할 때 '0'을 빼면 된다는 사실을 자꾸 까먹는다 ㅜㅜ 잊지말자!
마지막 정답을 출력할 때 cnt만 출력하면 되는 줄 알고 자꾸 답이 안맞아서 고민을 조금 했는데, 역시 문제를 잘 읽어야 되겠다.
'알고리즘' 카테고리의 다른 글
[BOJ] BOJ 1946.신입사원 (JAVA) (0) | 2022.03.03 |
---|---|
[SWEA] 7465. 창용 마을 무리의 개수 (JAVA) (0) | 2022.03.03 |
[SWEA] 1233. 사칙연산 유효성 검사 (JAVA) (0) | 2022.02.09 |
[SWEA] 1232. 사칙연산 (JAVA) (0) | 2022.02.09 |
[SWEA] 1231. 중위순회 (JAVA) (0) | 2022.02.08 |