ToBe끝판왕

[ 알고리즘 ] 백준 1110번 문제 - 자바( JAVA ) 본문

■ 알고리즘/백준 JAVA

[ 알고리즘 ] 백준 1110번 문제 - 자바( JAVA )

업그레이드중 2022. 5. 27. 16:25
반응형

주의사항

※ 백준에서 정해진 출력 형식을 출력해야 한다.
※ 백준 알고리즘에서는 클래스명을 Main으로 해주어야 한다.

 


 

백준 1110번 문제

 

백준 알고리즘의 단계별 문제 풀기

3단계 < 반복문 >

 

 

 해당 문제 링

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 


 

코딩 하기

 

1) Scanner 사용

import java.util.Scanner;

public class Main {

	public static void main( String[] args ) {
    
    	Scanner sc = new Scanner( System.in );
        
        int N = sc.nextInt();
        
        sc.close();
        
        int count = 0;
        int copy = N;
        
        while( true ) {
            N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
            count++;
            
            if( copy == N ) {
            	break;
            }
        }
        
        System.out.println( count );
    }
}

 

 

2) BufferedReader 사용

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

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

 

 

 

문제 해결

 

수학적으로 접근하여 푼다.

N 이라는 정수가 주어진다면, N의 1의 자릿수는 새로운 수의 10의 자리로, N의 1의 자릿수와 10의 자릿수를 더한 값의

1의 자릿수는 새로운수의 1의 자리로 가면 된다. ( 만약 N이 한자리 정수라면 앞에 0을 붙여 더한다. )

 

먼저 주어진 수를 N, 새로운 수를 T라고 가정

 

N의 일의 자릿수는 새로운 T의 십의 자리로 간다.

// T의 십의 자릿수

T = (N % 10) * 10

 

두개를 더한 뒤, 10으로 나눈 나머지가 N의 각 자릿수의 합의 일의 자릿수가 되므로

T의 일의 자릿수가 된다.

// T의 일의 자릿수

T = ((N / 10) + (N % 10)) % 10

 

최종적으로 새로운 수 T

T = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10)

 

반복문에 적용하면 ( T도 N값이 바뀌는것이므로 N으로 한다. )

while(true){
	N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
}

 

 

•  처음 입력값을 복사한 변수 copy

•  반복문이 몇번 반복 되었는지 세어 변수 count에 넣는다.

•  복사한 변수값이 처음 입력값 copy 와 같아지면 반복문을 종료한다.

	int count = 0;
        int copy = N;
        
        while( true ) {
		N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
            	count++;
            
            if( copy == N ) {
            	break;
            }
        }
        
        System.out.println( count );
    }

 

 

 

 

반응형
Comments