-
[백준, Python] 1110번: 더하기 사이클알고리즘 2023. 1. 22. 18:36
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
문제설명
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문으로 반복 루프를 돌려서 split()으로 한 글자 씩 쪼개서 연산을 해줘야되나? 라는 생각으로 코드를 짜봤지만 오히려 코드가 복잡해지고 결과가 다르게 나왔었다.
그래서 그냥 수학적인 방법으로 답을 도출하기로 했다!
N = int(input()) M = N cnt = 0 while(True): A = N // 10 B = N % 10 N = 10*B + (A+B) % 10 cnt += 1 if N == M: break print(cnt)최종적으로 비교하기 위해서 M이라는 변수에 N을 똑같이 담아 주었고, 얼마나 루프를 돌았는지 도출하기 위해 cnt라는 변수도 선언해주었다.
그리고 산술 연산자를 이용해서 N의 몫과 나머지를 A, B변수에 지정했고 일의 자리 수와 이의 자리수를 구해 서로 더해줌으로써
사이클 구조를 만들어 N변수에 계속 업데이트 할 수 있도록 했다. 한번 루프가 끝나면 cnt변수에 1을 더해줌으로써 카운트할 수 있도록 구현했다.최종적으로 처음에 비교하기 위해 만들어놓은 M과 계속해서 업데이트 되었던 N을 비교해서 값이 같으면 break문으로 빠져 나오도록
구현했다!!'알고리즘' 카테고리의 다른 글
[백준, Python] 9093번 : 단어 뒤집기 (0) 2023.01.25 문자열에서 숫자만 추출하는 방법(Python) (0) 2023.01.25 영어를 알파벳 순서대로 정렬하는 방법 (0) 2022.12.14 그래프 탐색 알고리즘 (DFS와 BFS) (1) 2022.10.11 [Python] 백준 1920번 - 수 찾기 (0) 2022.07.13