[BAEKJOON] NO.1110 더하기 사이클

박민주·2021년 9월 16일
0

BAEKJOON

목록 보기
10/10
post-thumbnail

https://www.acmicpc.net/problem/1110

문제가 간단해보여서 바로 코딩으로 들어가고 싶었지만,
이런 숫자만 가지고 노는 문제들이 오히려 더 헷갈리는 경우가 많아서
나름 나만의 언어로 바꾸는 작업이라고 생각하며 계획을 작성해보았다.

계획 작성

위처럼 대략적으로 작성하고 나서 코딩을 시작했다.
이번에는 위 계획처럼 완벽하게 되진 않았지만 그래도 문제를 확실히 이해할 수 있어
계획 작성이 도움이 되었다.

#include <iostream>
using namespace std;

int GetFirstDigit(int num)
{
    return num / 10;
}

int GetSecondDigit(int num)
{
    return num % 10;
}

int MakeNewNumber(int n1, int n2)
{
    return (n1 * 10) + n2;
}

int main(void)
{
    int input = 0, sum = 0;
    int newNumber = -1;
    int cycle = 0;

    cin>>input;
    int target = input;
    
    while(newNumber != target)
    {
        sum = GetFirstDigit(input) + GetSecondDigit(input);
        newNumber = MakeNewNumber(GetSecondDigit(input), GetSecondDigit(sum));
        input = newNumber;
        cycle++;
    }    
    cout<<cycle<<endl;
}
  1. 코드를 보면 계획과 달라진 점은
    알고리즘 수행을 위해 newNumber와 sum 외에도 input과 target이라는 변수를 더 사용했다는 것이다.

    그 이유는 while문 조건 때문이다.
    처음엔 newNumber가 input이랑 같지 않으면 반복하라고 했는데,
    newNumber를 통해 자리수를 구하려면 input의 값을 newNumber에 넣어주어야 했고,
    그러면 바로 같아져서 반복이 종료되었다.

  2. 또 하나 포인트는 newNumber를 -1로 초기화했다.
    테스트 케이스 중 0을 넣으면 1이 나와야하는 게 있는데,
    newNumber의 초기값이 0이면 target도 0이 되서 반복없이 종료되기 때문이다.

  1. 이번 코드에서는 함수의 이름이 깔끔하고, 내용도 한 줄로 끝나서 좋은 것 같다.
profile
Game Programmer

0개의 댓글