Coding Test/BaekJoon_Python

BaekJoon - 1110번: 더하기 사이클(반복문, PYTHON)

  • -
728x90

문제 분석

정수 범위 = 0~99

만약 10보다 작은 수  a -> 0a(앞에 0을 붙인다. ex> 01, 02)

각 자리의 숫자를 더한다. ex) 26 => 2+6 = 8

더한 값이 두 자릿수이면 1의 자리만 남겨둔다 ex) 6+8 = 14 => 4

더한 숫자를 기존 숫자 뒤에 붙이고 기존 숫자의 제일 왼쪽 숫자를 없앤다. 268 => 68

이 과정을 반복하였을 때 원래 숫자로 돌아올 수 있는 사이클의 길이(반복한 횟수) N을 구해보자.

입력 -> 출력

  • 26 -> 4
  • 55 -> 3
  • 1   -> 60
  • 0   -> 1
  • 71 -> 12

출력 매커니즘(예시)

  • 26 -> 68
  • 68 -> 84
  • 84 -> 42
  • 42 -> 26
  • N = 4

유의사항(코드 설계)

  • 정수 형태의 수 A 입력
  • 결과값이 a일 경우 break를 거는 루프 시작
  • if문을 이용하여 수가 한 자릿수인 지 확인
  • 한자릿수의 경우에 뒤에 같은 수를 더하는 작업 진행
  • 두자릿수의 경우에 앞자리와 뒷자리를 더하고 그 값을 a의 뒤에 붙여넣고 앞자리 탈락시키는 과정 추가(result에 갱신)
  • 사이클의 길이 N 1 증가
  • break로 빠져나온 뒤에 N 출력

사용할 문법

  • while
  • if
  • map
  • print
  • 자릿수 나누기(a/10, a%10)

정답코드

#0~99사이의 변수 A 입력
A = int(input())
B = 0
N = 1
A1 = int(A % 10)
A10 = int(A/10)
#반복문 형성(사이클 구성문), 사이클 길이 N 추가
while A != B:
    #A가 두 자릿수일 때
    if A/10 > 0:
        #B는 A의 1의자리가 10의자리로 가고 10의자리 수는 없어지며
        #각 자릿수를 더한 값의 1의 자리가 새로운 1의자리수가 된다
        B = int(A1*10 + (A1 + A10)%10)
    else:
        #A가 한 자릿수일 때
        #같은 숫자 뒤에 붙이기
        B = A1*10 + A1
    A1 = int(B % 10)
    A10 = int(B/10)
    #A와 B가 같을 때 종료
    if A == B:
        break
    N += 1
#사이클의 길이 N 출력
print(N)

코드 실행 예 1
실행 예2

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.