본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 1110번 java 더하기 사이클 while문

by 졸린이 2020. 8. 18.
반응형

백준 1110번 java 더하기 사이클 while문 

뭔가 좀 귀찮고 복잡해 보이는 문제다.

 

일단 간단하게 설명하면 1~99사이의 임의의 n값을 입력한다.

 

예를들어 26을 입력하면 2+6=8을 거치고 뒤에 6,8로 68이라는 새로운 수를 만든다. 이게 1 cycle이다.

 

다음 사이클에서는 6+8=14로 두 자리 수가 나오면 뒤에 있는 수를 사용한다. 즉 84가 두 번째 사이클에 수가 된다.

 

이렇게 돌다 보면 다시 본인의 수 26으로 돌아오게 되는데 그때 몇 사이클을 돌았는지 출력하는 프로그램이다.

 

그리고 맨 처음 입력한 수가 10 이하여서 한 자리 수면 10을 곱해서 두 자리 수로 만들어주고 진행한다.

 

코드를 봅시다.

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
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<10)
            n *= 10;
    
        int left, right, cnt = 0, sum = n;
 
        while(true) {
            left = sum / 10;
            right = sum % 10;
            sum = left + right;
            
            sum = right * 10 + sum % 10;
            cnt++;
            if(sum == n)
                break;
        }
        System.out.println(cnt);
    }
}
cs

line11, 12 : 입력 수가 10 미만이면 n에 10을 곱해준다.

 

line14 : left, right 두 자리 수를 각각 더해야 하므로 선언해주고 몇 사이클을 도는지 세주는 cnt 변수 선언 입력값과 새로운 수의 비교를 위해 sum을 선언해주고 초기값은 n을 준다.

 

line16 : while문 true로 반복시킨다.

 

line17 : left가 두 자리수중 첫번째 즉 10의 자리의 수이므로 10으로 나누고 몫을 전달해주면 된다.

 

line18 : 마찬가지로 right는 10으로 나눴을 때 나머지를 주면 된다.(1의 자리)

 

line19 : sum에 left와 right를 더한다.

 

line21 : (2+6=8)새로운 수는 이렇게 right를 10의 자리 수로 8은 일의 자리 수로 만드므로 right에 10을 곱하고 sum에 10으로 나누고 나머지 수를 더한다.(10이상의 수가 나왔을 때 마지막 자리 수로 해야하므로)

 

line22 : 이렇게 한 사이클을 돌고 cnt값을 올려준다.

 

line23 : 사이클을 끝내고 새로운 수 값이 입력한 값과 같으면 break문으로 while문을 빠져나간다.

 

while문이 끝나면 cnt를 출력해주면 된다.

반응형

댓글