티스토리 뷰

Algorithm

[Java/백준(boj)] 2145번. 숫자놀이

Jingni 징니 2021. 2. 26. 23:54

 

 

[Java/백준(boj)]

2145. 숫자놀이

 

www.acmicpc.net/problem/2145

 

2145번: 숫자 놀이

각 줄에 숫자 N이 주어진다. N은 100,000보다 작은 양의 정수이다. 마지막 입력은 0이며, 0에 대한 결과는 출력하지 않는다.

www.acmicpc.net

 


 

 

입력

각 줄에 숫자 N이 주어진다.

N은 100,000보다 작은 양의 정수이다.

마지막 입력은 0이며, 0에 대한 결과는 출력하지 않는다.

 

출력

한 줄에 하나씩 한 자릿수 결과를 출력한다.

 

풀이 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            // 입력 받기
            String tmp = br.readLine();

            // 종료 조건
            if (tmp.equals("0")) {
                break;
            }

            String[] num = tmp.split("");

            // 계산 하기
            testNum(num);
        }
    }

    // 재귀함수 형식으로 구현
    static void testNum(String[] num) {
        int rslt = 0;
        for (int i = 0; i < num.length; i++) {
            rslt += Integer.parseInt(num[i]);
        }

        // 10으로 나눠서 몫이 0이면 한 자릿수라고 판단함.
        if((rslt / 10) == 0) {
            // 결과가 나왔으므로 출력
            System.out.println(rslt);
        } else {
            // 아직 한 자릿수가 되지 않았을 경우 재귀 호출.
            testNum(String.valueOf(rslt).split(""));
        }
    }
}

 

후기

문제를 어떻게 풀까 고민하던 중, 재귀를 이용해 풀었다.

재귀로 푸는게 젤 효율적일지 확신이 안서서 맞췄다는 결과 보고 다른 분들 코드 확인해보려고 들어가니 자바로는 나 포함 3명밖에 안풀어서 당황스러웠다... 우선은 로직 자체는 나쁘지 않은 것 같아서 일단 올려보기!!!

굳이 결과 값을 ArrayList에 담았다가 출력해야 하나? 라는 의문이 남는 코드... 좀 아쉽다🤔

아쉬워서 한번 고쳐봤는데 굳이 담아뒀다가 나중에 출력하지 않고 바로바로 출력하는 식으로 코드를 짜도 정답처리가 되길래 코드를 살짝 변경했다!! (이전에는 결과값을 ArrayList에 저장해뒀다가 while루프가 끝나고(0을 입력받았을시) ArrayList에 있었던 결과값들을 출력하는 방식이었다.)

 

채점 결과

그래두 정답!!!!

 

 

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday
공지사항
최근에 올라온 글