(백준)1110번 더하기 사이클 풀기

DevSeoRex·2022년 6월 6일
0

백준

목록 보기
3/12

문제의 요지는 26이라는 숫자를 주었을때, 2 + 6 = 8 68 이라는 새로운 숫자를 만들라는 것이다.

이 경우 공식을 세우면 이렇게 된다.

26에서 일의 자리숫자를 빼내려면
26 % 10 = 6 * 10 = 60 여기서 10을 곱해주는 이유는 26의 일의 자리 수가 새로운 수의 십의자리 수가 되기 때문에 그렇다.

일의 자리 같은 경우에는 26의 일의 자리와 십의 자리의 합이므로,
((26%10)+(26/10))%10 이다.
여기서 처음에는 (26%10)+(26/10)을 해주었다 그런데 바꾼 이유는,
만약, 26과 같이 2 + 6= 8 이면 정상적인 값을 취할 수 있지만, 84와 같이 8 + 4 = 12 일 경우에는 전혀 다른 값이 나와버린다. 그렇기 때문에 10으로 나눈 나머지를 취해서 예외적인 경우까지 잡아주었다.

import java.util.Scanner;
public class Main6 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int count = 1;
		int num = sc.nextInt();
		int newNum = 0;		
		newNum = ((num%10)*10) + (((num%10)+(num/10))%10);
		while(true) {
			newNum = ((newNum%10)*10) + (((newNum%10)+(newNum/10))%10);
			if(newNum == 0) {
				break;
			}
			count++;
			if(newNum == num) {
				break;
			}
		}
		System.out.println(count);
	}
}

원래 숫자인 num으로 돌아갈때 까지의 횟수를 세줄 count 변수와 Scanner로 입력 받은 최초의 숫자 num, 그리고 num을 새로운 숫자로 바꾸어줄 newNum을 선언해 주었다.
while문을 선언하기 전에 위에서 num을 newNum으로 바꾸고 시작하기 때문에 count는 1로 시작하였다.

이렇게 코드를 작성했더니 0을 입력하면 무조건
0+0 = 0 이기 때문에 횟수는 당연히 1번이 되야 하는데 count++; 에서 count가 추가되어 2회로 출력되는 일이 발생하여 0에 대해서만 if문 으로 break; 되게 해주었다.

문제를 다 풀고 다른 분들의 풀이를 보았는데,
입력받은 정수값을 다른 변수에 넣어 놓고,
while문 안에서 바로 입력 받은 값을 가지고 있는 변수에 계속 연산하여 대입하고 반복한뒤에, 마지막에 조건문으로 보관한 값과 현재 값을 비교하는 식으로 간결하게 작성한 것을 보았다.
그것을 보고 코드를 수정해보았는데 한결 깨끗해졌다.

import java.util.Scanner;
public class Main6 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int count = 0;
		int num = sc.nextInt();
		int newNum = num;		
		while(true) {
			newNum = ((newNum%10)*10) + (((newNum%10)+(newNum/10))%10);
			count++;
			if(newNum == num) {
				break;
			}
	}
	System.out.println(count);
}

}

0개의 댓글