본문 바로가기
알고리즘 & 자료구조/백준

백준 1100

by 신재권 2021. 7. 4.
import java.util.Scanner;

public class Main1110 {

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

}

이 문제는 정수 N을 입력받는다. 

만약 N이 26이 입력되었다면

2+6=8  이렇게 한싸이클이다.

6+8 = 14 두번째 사이클

8+4 = 12 세번째 사이클

4+2 = 6 네번째 사이클 

26<- 즉 이렇게 다시 돌와오면 사이클이 종료된다. 

사이클의 횟수를 출력하는 예제이다.

이 문제의 알고리즘을 파악해보면 ,

26이 입력되었을 시, 입력값의 일의자리수를 다음번의 십의 자리수로 만들어주면 되고, 

더한값 8을 다음번의 일의 자리수로 만들어 주면된다.

 

1. 새로운 십의자리수 만들기

N%10 계산을 하면 일의 자리수가 반환된다. 즉 26을 10으로 나머지 연산을 진행해 6을 얻는 것이다.

후에 10을 다시 곱해주면 60을 얻으므로 새로운 십의자리수로 만들어 줄 수 있다.

즉 int T = ((N%10)*10)  <- 십의 자리수

 

2. 새로운 일의 자리수 만들기

N을 26이라 하였을 때 , N/10 은 십의자리수 2를 얻게 된다.  N%10은 일의자리수 6을 얻게된다. 

십의자리수와 일의자리수를 더하면 2+6처럼 분해를 하여 계산을 할 수 있다. 결과는 8이 나온다. 

여기에서는 결과가 8이라 바로 일의자리수에 넣어도 무방하지만, 만역 결과가 10이상이라면 %10연산을 따로 해줘야 한다. 그래야 일의자리수를 반환이 가능하다. 결국 8%10이므로 8이반환된다.  

int T = (((N/10)+(N%10))%10); <- 일의자리수

 

3. 서로 합치기

십의자리수와 일의자리수를 합친다. 위에서 60과 8을 얻었다. 즉 더하면 68이 반환된다.

반복문안에 결과가 있으므로 26이 돌아올때 까지만 while문을 반복하면 된다.

즉 N값을 따로 copy를 해주어 보관을 하고 if문으로 종료 조건을 걸면 된다. 

그리고 count값을 세기위해 증감연산자를 반복문 안에 삽입한다.

또한 반복적으로 N값을 갱신을 해주어야 하므로 위에서 선언한 int T 대신 N값에 값을 대입한다.

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

 

마지막에 count값을 출력해주면 된다.

 

 

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 2562  (0) 2021.07.07
백준 10818  (0) 2021.07.07
백준 10952  (0) 2021.07.03
백준 10951  (0) 2021.07.03
백준 2742  (0) 2021.07.02