본문 바로가기
파이썬/BOJ_반복문

[백준 1110 파이썬] 더하기 사이클 - 반복문 (무한루프 (while True) + 조건문 (if, else))

by 쉽게사는방법 2023. 1. 21.
반응형

[백준 1110 파이썬] 더하기 사이클 - 반복문 (무한루프 (while True) + 조건문 (if, else))

 

안녕하세요.

어느덧 반복문 마지막 문제입니다. 제목이 '더하기 사이클'인데 어디서 들어보진 못해서 문제에서 만든 개념인지 원래 있는건지는 모르겠습니다. 주어진 로직대로 계산하면 되니 차근차근 문제를 분석해 봅시다!

 

문제

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의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

 

문제 분석

입력은 1~99 사이의 정수 1개입니다. '주어진 수가 10보다 작다면 앞에 0을 붙여...' 부분은 입력 값이 1의 자리수라면 10의 자리수는 0으로 놓고 계산하면 된다고 해석하면 되겠네요.

 

그럼 어떤 입력값 N을 임의의 n이라는 변수에 할당해줍니다.

n의 10의 자리수 a와 1의 자리수 b로 분해해 봅시다. (a, b는 각각 0~9, 둘다 0인 경우는 제외)

각 자리의 숫자를 더해야 하니 a+b를 해봅니다.

주어진 수의 가장 오른쪽 자리수 b와 a+b의 가장 오른쪽 자리 수 (1의 자리수) c를 이어붙여 새로운 수를 만듭니다. b와 c를 순서대로 붙이면 b가 10의 자리수, c가 1의 자리수가 되겠네요.

n을 새로운 숫자로 업데이트하고 사이클 횟수 x를 +1해서 카운트합니다. (x의 초기값은 0이어야겠죠)

N=n이 될때까지 루프를 반복하고, N=n이 되면 루프 종료, x를 출력해 줍니다.

 

수식으로 바꿔볼까요? 위에서 언급한 M, a, b, c, x를 계산할 수 있으면 되겠네요. 

변수 수식
n 초기값: N
루프 내부: b*10+c
a N//10
b N%10
c (a+b)%10
x 초기값: 0
루프 내부: x+1

연산자에 대한 자세한 설명은 '사칙연산' 포스팅을 참고하시면 좋을 것 같습니다.

 

답안

지난 'A+B -5' 포스팅에서 살펴본 무한루프 while True를 사용했습니다. while n!=N 과 같이 조건을 지정할 수도 있지만, 이 경우에는 n=N인 상태에서 시작하기 때문에 루프를 시작하지 않고 지나가게 됩니다.

무한루프 내에서 조건문을 사용해서 n=N인 경우 break로 루프를 빠져나오면 되겠죠!

백준 1110 풀이 (파이썬)
백준 1110 풀이 (파이썬)

 

또 하나의 카테고리가 마무리되었습니다. 매 단계를 넘어갈 때마다 소소한 뿌듯함이 있네요. 처음부터 너무 높은 목표보다는 작은 성취들을 모아가는게 무엇이든 꾸준히 할 수 있게 하는 동력이 되는 것 같습니다.

 

이만 마치도록 하겠습니다.

읽어주셔서 감사합니다.

반응형

댓글