자바에서 숫자를 문자로 문자를 숫자로, 문자열을 배열로 자료형 변환 배우기 + 나눗셈의 몫과 나머지

1. 문제

 

1288. 새로운 불면증 치료법

 

SW Expert Academy

 

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));
		}
		
		
	}
}
TAGS.

Comments