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의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다
출력
첫째 줄에 N의 사이클 길이를 출력한다.
코드
n = int(input())
cnt = 0
res = n
while True:
if cnt != 0 and res == n:
print(cnt)
break
cnt += 1
if res < 10:
res = res * 11
else:
new_sum = (res // 10) + (res % 10)
res = (res % 10) * 10 + (new_sum % 10)
처음에는 문자열로 풀려다가 그게 더 복잡한 것 같아서 정수형으로 변환하여 풀었다.
- 주어진 수가 10보다 작다면 주어진 수의 가장 오른쪽 수와 주어진 수의 각 자릿수를 더한 수의 가장 오른쪽 수를 이어붙인 수는 결국 처음 주어진 수를 이어 붙인 것과 같다. 따라서 처음 주어진 수에 11을 곱하면 된다.
- 주어진 수가 10보다 작지 않다면 우선 주어진 수의 각 자릿수를 더한 수를 구해서 new_sum이란 함수에 넣어준다. 각 자릿수를 더한 수는 주어진 수를 나눈 몫과 주어진 수를 10으로 나눈 나머지를 더해주면 된다.
주어진 수를 10으로 나눈 나머지에 10을 곱한 값에 new_sum을 10으로 나눈 나머지를 더해주면 문제에서 말하는 새로운 수를 만들 수 있다. - cnt를 증가시키며 만들어진 새로운 수가 처음 주어진 수와 같을 때까지 반복한다.
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 2581번 소수 (0) | 2023.02.06 |
---|---|
[Python/파이썬] 백준 1978번 소수 찾기 (0) | 2023.02.06 |
[Python/파이썬] 백준 11653번 소인수분해 (0) | 2023.02.05 |
[Python/파이썬] 백준 1934번 최소공배수 (0) | 2023.02.05 |
[Python/파이썬] 백준 2609번 최대공약수와 최소공배수 (0) | 2023.02.05 |
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의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다
출력
첫째 줄에 N의 사이클 길이를 출력한다.
코드
n = int(input()) cnt = 0 res = n while True: if cnt != 0 and res == n: print(cnt) break cnt += 1 if res < 10: res = res * 11 else: new_sum = (res // 10) + (res % 10) res = (res % 10) * 10 + (new_sum % 10)
처음에는 문자열로 풀려다가 그게 더 복잡한 것 같아서 정수형으로 변환하여 풀었다.
- 주어진 수가 10보다 작다면 주어진 수의 가장 오른쪽 수와 주어진 수의 각 자릿수를 더한 수의 가장 오른쪽 수를 이어붙인 수는 결국 처음 주어진 수를 이어 붙인 것과 같다. 따라서 처음 주어진 수에 11을 곱하면 된다.
- 주어진 수가 10보다 작지 않다면 우선 주어진 수의 각 자릿수를 더한 수를 구해서 new_sum이란 함수에 넣어준다. 각 자릿수를 더한 수는 주어진 수를 나눈 몫과 주어진 수를 10으로 나눈 나머지를 더해주면 된다.
주어진 수를 10으로 나눈 나머지에 10을 곱한 값에 new_sum을 10으로 나눈 나머지를 더해주면 문제에서 말하는 새로운 수를 만들 수 있다. - cnt를 증가시키며 만들어진 새로운 수가 처음 주어진 수와 같을 때까지 반복한다.
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 2581번 소수 (0) | 2023.02.06 |
---|---|
[Python/파이썬] 백준 1978번 소수 찾기 (0) | 2023.02.06 |
[Python/파이썬] 백준 11653번 소인수분해 (0) | 2023.02.05 |
[Python/파이썬] 백준 1934번 최소공배수 (0) | 2023.02.05 |
[Python/파이썬] 백준 2609번 최대공약수와 최소공배수 (0) | 2023.02.05 |