1. 문제
1288. 새로운 불면증 치료법
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
2. 풀이
import java.util.Scanner;
Scanner sc = new Scanner(System.in);으로 입력을 받기
sc.nextInt();는 정수값 입력을 받아 변수에 저장
----------------------------------------------------------------------------------------
int[] visited = new int[10];은 길이가 10인 정수값 배열을 선언
0~9까지 봤는지 안봤는지를 체크하는 배열이다
----------------------------------------------------------------------------------------
String.valueOf(int);는 정수를 문자열로 변환시켜줌
----------------------------------------------------------------------------------------
String.toCharArray();는 문자열을 char 배열로 변환
--------------------------------------------------------------------------------------
char을 int로 바꿀려면...
Character.getNumericValue(c)
--------------------------------------------------------------------------------------
나머지는 기본적인 로직이다
정수 n을 입력받아 x = 1부터, xn을 구하고, 각 자리수를 구해서 0~9까지인지 아닌지 체크하는 visited에 대입해서 1로 바꿔줌
다시 visited를 순회해서 전부 1인지 아닌지를 체크
전부 1이면 0~9까지 모두 본 것이므로 반복문 탈출하고 xn을 print
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
//입력을 받는다
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); //정수값 받는다
for(int t=1; t<T+1; t++) {
int N = sc.nextInt(); //정수값 받는다
int x = 1;
int[] visited = new int[10]; //길이가 10인 배열생성
while(true) {
String xn = String.valueOf(x*N); //정수를 문자열로 변환
char[] arr = xn.toCharArray(); //문자열을 char 배열로 변환
for(char c: arr) {
visited[Character.getNumericValue(c)] = 1;
}
Boolean find = true;
for(int i=0;i<visited.length;i++) {
if(visited[i] == 0) {
find = false;
break;
}
}
if (find == true) {
break;
}
x++;
}
System.out.println("#"+t+" "+(x*N));
}
}
}
근데 갑자기 또 하나 생각난게
정수에서 각 자리수를 구하는 방법은 10으로 나눠보면 된다는 게 기억났음
처음 10으로 나눈 나머지가 1의자리.. 몫은 10의자리~
그리고 몫을 다시 10으로 나누면 10의자리, 그 몫은 100의자리~
다시 몫을 10으로 나누면 100의자리, 몫은 1000의자리~
...
...
아무튼
자바에서 나머지는 int r = n % 10;으로 %연산자로 구할 수 있는데
// 이런 몫 연산자는 없다고함
그래서 / 결과를 int 타입 변수에 저장해야 몫이 된다고 한다
int q = n / 10; 하면 n을 10으로 나눈 결과를 정수로 바꿔서 q에 저장!
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int t=1; t<T+1; t++) {
int N = sc.nextInt();
int x = 1;
int[] visited = new int[10];
while(true) {
int n = x*N;
while (n > 0) {
//정수의 나머지와 몫 구하기
int c = n % 10; //나머지
int m = n/10; //몫
visited[c] = 1;
n = m;
}
Boolean find = true;
for(int i=0;i<visited.length;i++) {
if(visited[i] == 0) {
find = false;
break;
}
}
if (find == true) {
break;
}
x++;
}
System.out.println("#"+t+" "+(x*N));
}
}
}
'알고리즘 > Java 기초' 카테고리의 다른 글
자바 자료구조1 -동적배열(ArrayList) (0) | 2023.02.23 |
---|---|
자바 초보에서 알고리즘 B형까지 도전기4 -배열 필수지식1- (0) | 2023.02.22 |
자바 초보에서 알고리즘 B형까지 도전기3 -반복문 필수지식1- (0) | 2023.02.22 |
자바 초보에서 알고리즘 B형까지 도전기2 -사칙연산, 조건문 필수지식- (0) | 2023.02.21 |
자바 초보에서 알고리즘 B형까지 도전기1 -입력과 출력 필수지식- (0) | 2023.02.20 |