백준

[백준/BOJ] 6378번 : 디지털 루트 (JAVA / 자바)

코메인 2022. 2. 6. 23:34

안녕하세요~ 코딩하는 코알못 코메인입니다.

 

 

https://www.acmicpc.net/problem/6378

 

6378번: 디지털 루트

양의 정수 N의 디지털 루트를 구하려면 N을 이루고 있는 모든 자리수를 더해야 한다. 이때, 더한 값이 한 자리 숫자라면, 그 수가 N의 디지털 루트가 된다. 두 자리 이상 숫자인 경우에는 다시 그

www.acmicpc.net


- 문제 -

 

난이도 브론즈 3 문제이다.

 

자바에서 입력방식은 scanner와 bufferedreader가 있다.

자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.

bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.

더 자세한 내용은 아래 글 참고 하면 좋다.

https://comain.tistory.com/3

 

(JAVA / 자바) Scanner 와 Bufferedreader

안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자

comain.tistory.com

 

풀이 방법

테스트 케이스의 수가 주어지지 않았기 때문에 무한 루프 사용.

0 입력시 무한루프 종료.

입력값을 문자열로 받는다.

입력값이 몇자리 수인지 계산을 몇번까지 해야하는지 모르기 때문에 무한루프 사용.

연산 후 문자열의 자릿수가 1이 되면 무한루프 종료.

문자열이 2자리 이상일때 charAt으로 자릿수마다 더한다.

int형 배열에 저장하고 결과 값을 문자열로 형변환해서 문자열로 저장한다. 이 행위를 1자리수가 될때까지 반복하는 것이다.


-풀이-

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		//무한루프
		while(true) {
			String S = br.readLine();
			
			//0입력시 무한루프 종료
			if(S.equals("0")) break;
			
			//무한루프
			while(true) {
				//자릿수의 수들을 합쳐서 저장할 변수
				int sum = 0;
				
				//문자열 길이가 1이 되면 무한루프 종료
				if(S.length() < 2) {
					break;
				}else {
					for(int i = 0; i < S.length(); i++) {
						sum += S.charAt(i) - '0';
					}
				}
				//합을 문자열에 형변환해서 저장
				S = String.valueOf(sum);
			}
			System.out.println(S);
		}
	}

}

-결과-

 


아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.