-
[ 백준 1110번 ] 더하기 사이클 구하기코딩 공부/Baekjoon Problem_Set 2021. 7. 4. 17:59
백준 단계별 문제 풀이 중 while문 활용 1110번 문제를 살펴봅시다.
<문제>
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 있어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
<아이디어>
우선 while문의 활용이니까 while반복문으로 26부터 시작하는 과정을 반복을 하면 되겠다.
숫자를 자리수로 나누는 일은 몫 연산자와 나머지 연산자를 10과 활용하면 26을 2와 6으로 분리할 수 있겠다.
(26을 10으로 나누면 몫이 2 나머지가 6이기 때문)
반복하다가 원래 숫자가 나오면 반복문을 빠져나오면 되겠다.
<코드> (의식의 흐름 코드이기 때문에 좋은 코드는 아니다.)
#1110번 n = int(input()) N = n cnt=0 while 1: a = N // 10 b = N % 10 c = a+b N = int(str(b)+str(c%10)) cnt+=1 if(n==N): print(cnt) break
먼저 사이클을 계산할 숫자 n을 입력받고 다시 N에 할당해준다.(이 부분이 마음에 안 든다.)
사이클 카운트 변수 cnt를 초기화해주고 while문이 돌아간다.
a에다가 몫을 b에는 나머지 즉 26을 입력하면 a = 2 b = 6이다.
c는 a+b 즉 c = 2+6 즉 8 따라서 새로운 숫자 N은 다시 68이 되는 것이다.
이를 반복하다가 다시 26이 되면 카운트를 출력하고 프로그램이 종료된다.
'코딩 공부 > Baekjoon Problem_Set' 카테고리의 다른 글
[ 백준 1546 번 ] 평균 (0) 2021.07.07 [ 백준 3052번 ] 나머지 문제 (0) 2021.07.07 [ 백준 10871번 ] X보다 작은 수 출력 (0) 2021.02.24 [ 백준 2439번 ] 별 찍기(오른쪽 정렬) (0) 2021.02.24 [ 백준 2438번 ] 별 찍기 문제 (0) 2021.02.24