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의 사이클 길이를 출력한다.
예제 입력 1
26
예제 출력 1
4
예제 입력 2
55
예제 출력 2
3
예제 입력 3
1
예제 출력 3
60
예제 입력 4
0
예제 출력 4
1
예제 입력 5
71
예제 출력 5
12
출처
풀이
0≤ N ≤ 99 정수가 주어진다.
주어진 N <10 작으면 앞에 0을 붙여 두자리 수로 만들고 각 자리의 숫자를 더한다.
그 후 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙여 새로운 수를 만들 수 있다.
- 26
- 2+6=8
- 68
- 6+8=14
- 84
- 8+4=12
- 42
- 4+2=6
- 26
4번만에 원래 수 26으로 돌아왔다. 따라서 26의 사이클 길이는 4이다.
N이 주어졌을 때, N의 사이클 길이를 구하는 프로그램을 작성하시오.
- 입력받은 정수를 자릿수에 맞춰 나눈다.
- 주어진 정수가 10보다 작으면 앞에 0을 붙여 두자리 수로 변환
- 십의자리 + 일의자리 숫자를 더한다.
- 기존 수의 일의자리, 새로 만든 수의 일의자리를 붙여 새로운 수를 생성한다.
- 사이클 횟수를 기록한다.
- 처음 입력한 숫자가 나올때까지 반복한다.
- 처음 입력한 숫자가 나오면 기록한 사이클 횟수를 출력한다.
입력된 숫자를 10으로 나누면 몫은 십의 자리 나머지는 일의 자리가 된다.
# 입력받는다.
n = input()
number = n
# 사이클 횟수 기록
count = 0
# 반복문
while True:
# 입력받은 숫자의 길이가 1일때 앞에 0을 추가해 2자리로 만든다.
if len(number) == 1:
number = "0" + number
# 십의 자리수와 일의 자리수를 더한다.
plus = str(int(number[0]) + int(number[1]))
# 기존의 숫자의 일의 자리수와 새로운 숫자의 일의 자리 수를 붙여 새로운 숫자를 생성
number = number[-1] + plus[-1]
# 사이클 횟수를 더한다.
count += 1
# 만약에 기존 입력받은 숫자와 새로만든 숫자가 똑같아지면 기록한 사이클을 출력한다.
if number == n:
print(count)
break
- 해당 코드는 연산시간이 오래걸려서 시간 초과가 뜸
# 정수값으로 입력을 받는다.
n = int(input())
number = n
# 사이클 횟수
count = 0
'''
10으로 나누어 몫은 십의 자리, 나머지는 일의 자리로 구분한 뒤 2개를 더해 새로운 숫자를 만들고
새로운 숫자의 일의 자리 숫자를 구한 뒤 해당 숫자에 10을 곱해 십의 자리 숫자로 만들고 새로운
일의 자리 수를 더한다.
'''
while 1:
ten = number // 10
one = number % 10
plus = ten + one
new_one = plus % 10
number = (one * 10) + new_one
# 사이클 횟수를 더하고 입력 숫자와 새로만든 숫자가 같으면 사이클 횟수를 출력한다.
count = count + 1
if(number == n):
break
print(count)
- 생각보다 이해하기 복잡했다 우선적으로 해당 문제를 다시한번 이해를 한뒤
- 어떻게 방향을 잡아 풀어야할지 적은 후
- 코드를 작성해보고, 너무 오랜 시간이 걸릴 경우 다른 사람들의 코드를 보고 해석해 본뒤
- 다시 한번 도전해보자.
'Coding Test' 카테고리의 다른 글
[백준]2562번 최댓값 (0) | 2022.01.24 |
---|---|
[백준]10818번 최소, 최대 (0) | 2022.01.24 |
[백준]10951번 A+B - 4 (0) | 2022.01.24 |
[백준]10952번 A+B-5 (0) | 2022.01.24 |
[백준] 10871번 X보다 작은 수 (0) | 2022.01.24 |