[백준/Python] 1110)더하기 사이클

Jimin_Note·2025년 8월 4일
0

[백준/Python]

목록 보기
35/35
post-thumbnail

✨ 2025.08.04 코딩테스트 문제 풀이

📌 문제: 더하기 사이클

🧠 문제 설명

  • 주어진 수 N에 대해 아래 규칙을 반복해 원래 수로 돌아오는 사이클의 길이를 구하는 문제

예시:
26
• 2+6=8 → 68
• 6+8=14 → 84
• 8+4=12 → 42
• 4+2=6 → 26
• 총 4번 → 출력: 4

💻 내가 작성한 코드

  • ❌ 1번째 답안(실패)
N = int(input())
cnt = 0
num = 0

c = [int(i) for i in str(N)]

while N != num:
    cnt += 1
    if sum(c) > 10 :
        c.append(sum(c)-10)
    else :
        c.append(sum(c))
    c.pop(0)
    num = int("".join(map(str, c)))

print(cnt)

틀린이유🥲

  • while N != num: 조건 때문에 처음 루프를 돌지 못함
  • N=0, N=11 등 일부 숫자에서 무한 루프 또는 오답 발생
  • 그리고 sum(c) > 10 조건도 10일 때 오류 (10은 그대로 써야 하므로 >= 10이 맞음)
  • ⭕️ 2번째 답안(통과)
N = int(input())
cnt = 0

c = [int(i) for i in str(N).zfill(2)]  # 항상 두 자리로 패딩

while True:
    cnt += 1
    s = sum(c)
    c.append(s % 10)  # 합의 일의 자리만 사용
    c.pop(0)
    num = int("".join(map(str, c)))
    if num == N:
        break

print(cnt)
  • zfill(2)로 항상 두 자리로 만들어 IndexError 방지
  • while True + break 로 사이클을 안정적으로 돌 수 있게 개선
  • s % 10 사용으로 1의 자리만 뽑는 간결한 표현!

✅ 배운 점

  • str(N).zfill(2) → N = 5일 때 '05'로 만들어서 [0, 5]로 변환해주는 메서드
  • 숫자 리스트 → 정수 변환: "".join(map(str, list)) → int()
  • while True:로 루프를 돌고, break로 종료 조건 제어하여 무한루프 방지
profile
Hello. I'm jimin:)

0개의 댓글