안녕하세요?
오늘은 백준 1110 문제 반성 시간을 갖도록 하겠습니다 . . .
1. 문제
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의 사이클 길이를 출력한다.
2. 내 답안
def str_circle(x) :
x = str(x)
if len(x) == 2 :
sum_x = int(x[0]) + int(x[1])
sum_x = str(sum_x)
if len(sum_x) == 2 :
new_x = x[1] + sum_x[1]
new_x = int(new_x)
new_x = str(new_x)
return new_x
else :
sum_x = '0' + sum_x
new_x = x[1] + sum_x[1]
new_x = int(new_x)
new_x = str(new_x)
return new_x
else :
x = '0' + x
sum_x = int(x[0]) + int(x[1])
sum_x = str(sum_x)
if len(sum_x) == 2 :
new_x = x[1] + sum_x[1]
new_x = int(new_x)
new_x = str(new_x)
return new_x
else :
sum_x = '0' + sum_x
new_x = x[1] + sum_x[1]
new_x = int(new_x)
new_x = str(new_x)
return new_x
x = input()
y = x
n = 1
new_y = 0
while 1 :
new_y = str_circle(x)
if y == new_y :
print(n)
break
else :
n = n+1
x = int(new_y)
continue
ㅋㅋㅋㅋ.....
진짜 개길다....
처음에 문제 보자마자 숫자 자리수별로 str로 접근해야겠구나~ 싶었는데
진짜 별의별 난관 다맞다가 이지랄로 나왔다.
3. 모범답안
n = int(input()) # 68
num = n
cnt = 0
while True :
a = num//10 # 6
b = num%10 # 8
c = (a+b)%10 # 6 + 8 = 1"4"
num = (b*10) + c # 80 + 4 = 84
cnt = cnt+1
if(num == n) : # 숫자같으면 멈춤
break
print(cnt)
str로 접근할 필요도 없었다.
그냥 10으로 나눈 나머지랑 몫가지고 계산하면 훨 편하게 구할 수 있었다. . . . . .......
와 왜 이생각을 못했을까..^^
빡대가린가 ㅎㅎㅎㅎㅎㅎㅎ
더 슬픈건 str로 접근해도 열몇줄이면 끝날 문제였다.
n = input() # 26
num = n
cnt = 0
while 1 :
if len(num) == 1:
num = "0" + num
plus = str(int(num[0]) + int(num[1])) # 2 + 6 = "8"
num = num[-1] + plus[-1] # "6" + "8" = "68"
cnt += 1
if num == n:
print(cnt)
break
하하하하하하하하
나 진짜 빡대가린가 ... ^^
생각해보니 if 문을 쓰고 꼭 else문을 쓸 필요도 없었고
(케이스를 꼭 2가지로 나눠서 코드를 진행할게 아니라 특정상황에서만 필요한거 딱해주고 넘어가면 되는구나..)
생각해보니까 맨 오른쪽거 가져올려면 그냥 [-1]로 했으면 됐었다.
(다시 2자리로 만들필요도 없었다...^^)
정신차리자 서준아.
백준 4673번 (0) | 2023.01.29 |
---|---|
백준 10818, 2562, 3052 (0) | 2023.01.14 |
백준 10951, 10807, 10871 (1) | 2023.01.13 |