SWE 1288(새로운 불면증 치료법)(D2)

No Image

1288 새로운 불면증 치료법 (D2)

양을 세면서 0에서 9까지의 모든 숫자를 보는 것은 최소 몇 번 양을 센 시점일까?

생각한 방법

Q) 반복문이 몇개나 필요해 ?

  1. 전체 Testcase반복
  2. 곱셈에서 0~9까지 나올 때 까지 반복
  3. 현재본 숫자 계산 -> 반복적으로 10 나누기

2번의 경우 0~9까지 나올 때가지 반복해주기 위해서는 input, 즉 계산을 해줄 값을 변경해줘야 하는데. input값이 변함에 따라 출력값이 변하는 방식이므로 함수로 만들어야 한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
	
	public static boolean []data = new boolean[10]; 
	public static int i;
	public static void func(int input) {
		// 입력받은 수 data에 넣기
		boolean flag = true;

		while (flag) {
			if (input < 10) {
				int number = input;

				for (i = 0; i < 10; i++) {
					if (i == number) {
						data[i] = true;
					}
				}
				flag = false;
			} else {
				int number = input % 10;

				for (i = 0; i < 10; i++) {
					if (i == number) {
						data[i] = true;
					}
				}
				input = input / 10;
			}
		}

	}
	public static void main(String args[]) throws Exception{
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(bf.readLine());
		
		// 값 담기
		
		int test_case = 1;
		
		while(T-- > 0 ) {
			int input = Integer.parseInt(bf.readLine());
			boolean flag = true;
			data = new boolean[10];
			int t = 1;
			while(flag) {
				int total = input *t;
				func(total);
				if(data[0] == true && 
					data[1] == true &&
					data[2] == true &&
					data[3] == true &&
					data[4] == true &&
					data[5] == true &&
					data[6] == true &&
					data[7] == true &&
					data[8] == true &&
					data[9] == true 
					) {
					flag =false;
				}
				t++;
			}
			System.out.print("#" + test_case + " ");
			System.out.println(input * (t-1));
			test_case++;
		}
	};
}
				



참고자료

SWE

0%