백준1110 더하기 사이클 using Python

horiz.d·2021년 10월 26일
0

열어보며

이번 문제는 입력값 N을 받아 소위 '플러스 사이클' 을 돌려 다시 N에 이르기까지 Cycle의 Length를 출력하는 문제이다.

예시 모델

입력값 N에 26이 주어지고 N이 더하기 사이클을 돌아 다시 26에 이르기까지 거치게되는 예시를 모델화하여 그려보았다.

이렇게 일반화 시킨 모델의 최소단위 요소와 개별 기능을 식별해내어 코드로 구현 하면 문제를 풀 수 있을것이다.


분해 및 핵심분석

  • 우선 위의 모델에서 확인할 수 있듯, N이 두자리 수로 주어진 경우에는 N을 앞뒤로 분리해 개별 한자리 수의 두가지 요소로 만들어 따로 저장할 필요가 있어보인다.

  • 더하기 사이클의 끝을 판별하기 위해서는 사이클로부터 독립적으로 저장된 N을 보존해 둘 필요가 있으므로, Plus cycle 내부에서 움직이는 N은 변수명 n으로 따로 할당하도록 만들 필요가 있다.

  • 사이클 한번에서 총 실행되는 최소단위 기능의 수를 count해두도록 한다. (length)

  • 사이클 내에 분리시켜둔 n이 N과 같은 경우 사이클을 종료하도록 한다.


풀이

  • 입력값 N을 받는다

  • N을 자릿수로 분해하여 A,B에 저장한다.

    • 10의 자리수 : 나누기 몫연산 // 활용
    • 1의 자리수 : 나누기 나머지 연산 % 활용
  • 사이클 내부의 반복횟수를 count할 cycleLength를 준비한다.

  • PlusCycle인 while 내부 동작을 더욱 구체적으로 구현하기 위해 앞서 준비한 모델에 살을 덧붙였고 아래와 같다.


테스트코드

테스트 코드를 사용하여 예시출력과 구성요소의 변화를 확인했다.
아래에는 수정 이후의 사진을 사용하여 알 수 없겠으나, 처음 시행부터 테스트 코드를 사용하여 Line 28에 %가 아니라 &로 잘못 작성하여 발생한 오류를 쉽게 발견하여 수정할 수 있었다.



최종 코드

위의 테스트 코드에서 추가적으로 예시출력 오류를 발견했다.
N값으로 0을 입력했을 때 while이 곧바로 break를 실행하게 되므로 cycle이 한번도 돌지 않는다.

따라서 위의 코드에서 n의 선언에서 값을 -1로 초기화 하도록 수정했다.

profile
가용한 시간은 한정적이고, 배울건 넘쳐난다.

0개의 댓글