본문 바로가기
Algorithm

[구현/수학] 백준 1110 더하기 사이클 - Python, Java

by jangThang 2022. 1. 22.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1110번: 더하기 사이클

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     0~99 사이의 정수가 입력값으로 주어집니다. 원래의 값으로 돌아가기 위해서는 몇 번의 '더하기 사이클'이 필요한지 구하는 문제입니다. '더하기 사이클'의 규칙은 다음과 같습니다.

     

    각 자리의 숫자를 더합니다. 주어진 수의 1의 자리와 더해서 만든 수의 1의 자리를 이어 붙입니다.
    즉 A + B = CD 일 때, BD가 산출됩니다.

     예를 들어, 55는 5+5 = 10 이므로 50. 5+0 = 5이므로 5. 0+5 = 5 이므로 55입니다. 총 3번의 더하기 사이클이 필요합니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하여 해결할

    star7sss.tistory.com

     수학적인 이해가 필요한 문제입니다. 규칙만 이해했다면, 단순히 1의 자리만 구해서 쉽게 판별할 수 있습니다.

     

     

     

    3. 코드

    N = int(input())
    cnt = 1
    AB = N
    
    while(True):
        CD = AB//10 + AB%10
        BD = (AB%10)*10 + CD%10
        if BD == N:
            break
        cnt += 1
        AB = BD
    print(cnt)

     더하기 사이클 규칙을 그대로 구현합니다. AB + CD = BD 이고, N = BD일 때 종료됩니다.

     

     

    import java.util.Scanner;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    
    		int n = sc.nextInt();
    		if(n == 0) {
    			System.out.println(1);
    			return;
    		}
    		int i = 0;
    		int n1 = n;
    		int n2 = 0;
    		for(; n2 != n; i++) {
    			n2 = n1%10 + n1/10;
    			n2 = (n2%10) + (n1%10)*10;
    			n1 = n2;
    		}
    		System.out.println(i);
    		sc.close();
    	}
    }

     

     

    반응형

    댓글