백준 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를 출력해주면 된다.
'프로그래밍 > 백준 알고리즘 코드' 카테고리의 다른 글
백준 5543번 Java 상근날드 3항 연산자로 (0) | 2020.08.19 |
---|---|
백준 10039번 Java 평균 점수 실습1 배열 (0) | 2020.08.19 |
백준 10951 java A + B - 4 while문 2단계 has.nextInt (0) | 2020.08.18 |
백준 10952번 자바 A + B - 5 while문 1단계 (0) | 2020.08.18 |
백준 10871번 java X보다 작은 수 for문 (0) | 2020.08.13 |
댓글