본문 바로가기

Algorithm

[Java] 백준 6378번 : 디지털 루트

1. 문제

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

2. 풀이

- 예제 입력에 최대 1000자리까지 조건이 있어서 String으로 활용하여 풀이하였다.

  • 몇 개의 숫자가 들어올지 모르니 while문에 true로 조건을 주었다.
  • String으로 입력을 받고 문제에 입력의 마지막 줄은 0으로, 입력한 값이 0이면 멈춘다는 것을 알 수 있다.
  • 중간에 while문을 true 조건을 주고 문자열 길이가 한자릿수 라면 break를 하고 그 값을 출력하게 조건을 주었다.
  • 길이가 한자리 보다 크다면 안에 for문을 만들고 charAt을 사용하여 한 글자씩 쪼개어 아스키코드 값 0을 기준으로 빼서 그 값을 sum변수에 대입하여 더한다.
  • 값이 int형 이므로 형 변환을 하고 입력했던 값에 대입하고, 그 값을 출력한다.

3. 코드

package baekjoon;

import java.util.Scanner;

public class Q6378 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            String str = scanner.next();

            if (str.equals("0")) { // 문자열 길이가 0 이면 break
                break;
            }
            while (true) {
                int sum = 0; // 더한 값 저장 할 변수
                if (str.length() < 2) { // 문자열 길이가 두자릿 수 보다 작으면
                    break;
                } else {
                    for (int i = 0; i < str.length(); i++) {
                        sum += str.charAt(i) - 48;
                    }
                }
                str = String.valueOf(sum);
            }
            System.out.println(str);
        }
    }
}