책 읽다가 코딩하다 죽을래

백준 1110번 더하기 사이클 문제 해답 본문

코딩/알고리즘문제

백준 1110번 더하기 사이클 문제 해답

ABlue 2020. 10. 26. 17:30

 

www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

while문을 적절히 사용하여 푸는 문제다. 

이 글을 포스팅 한 이유는 나는 이 문제를 가뿐히 성공했는데

남이 쓴 코드와 한번 비교해보니 배울 점이 있어서 포스팅한다.

 

 

import java.util.Scanner;

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

		int N = scan.nextInt();
		int output = N;
		int count = 0;
		boolean isFirst = true;
		int input1,input2,input3;
		do {
			if(isFirst) {
				input1 = N / 10;
				input2 = N - (input1 * 10);
				input3 = input1 + input2;
				if(9 < input3 ) {
					int input4 = input3 / 10;
					int input5 = input3 - input4 * 10;
					output = (input2 * 10) + input5;
					isFirst = false;
				}else {
					output = (input2 * 10) + input3;
					isFirst = false;
				}
			} else {
				input1 = output / 10;
				input2 = output - (input1 * 10);
				input3 = input1 + input2;
				int input4 = input3 / 10;
				int input5 = input3 - input4 * 10;
				output = (input2 * 10) + input5;
			}
			count++;
		}while (N != output);
		System.out.println(count);
	}
}

 

이것은 내가 짜놓은 코드이다.

이 문제의 정답이기도 하다.

 

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int number = Integer.parseInt(br.readLine());
        int count = 0;
        int result = number;
        do {
            result = ((result % 10) * 10) + (((result / 10) + (result % 10)) % 10);
            count++;
        } while (number != result);

        System.out.println(count);
    }
}

이것은 아이디 : boen0323 의 코드이다

내가 짜놓은 코드와 이 분의 코드는 같은 역할을 한다. 그렇지만 처리 속도와 메모리 차원에서 이 분이 짜놓은 코드가 더 우수하다. 코드길이만 봐도 당연히 이 분께 더 좋아보인다.

 

앞으로 문제를 풀었다고 그냥 넘어가지말고 다른사람이 푼 것도 참고해서 배워가야겠다.