새소식

코딩테스트/백준_브론즈

[C++] 더하기 사이클

  • -

[문제]

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

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net


[풀이 과정]

단순한 구현문제이지만 많이 귀찮았던 문제이다.

1의 자리 숫자를 계속해서 따로 저장을 해야 했기에 따로 변수를 하나 더 선언해서 1의 자리 숫자를 저장시켰다.


[코드]

#include <iostream>

using namespace std;

int main (){
    int n;
    cin>>n;
    
    int answer = 0; // temp가 n이 될 때까지 걸리는 시간.
    int temp = n; // n의 다음 값들을 temp로 지정.
    int units = 0; // 1의 자리 숫자.

    do{ //처음에 temp를 n으로 두었기에 do-while문을 선택.
        answer++; //count 증가 : 해당 
        units = temp % 10; //units 는 temp의 1의 자리 숫자.
        if(temp < 10){ //만일 temp가 10보다 작다면
            temp = temp * 10 + temp; //temp는 temp의 1의 자리 숫자를 10배하고 자기를 한번 더 더하자.
        }
        else{ //10보다 작다면
            temp = (temp / 10) + (temp % 10); //temp 는 10으로 나눈 몫과 10의 나머지를 더하자.
        }
        //해당 과정이 끝났뒤에 
        if(temp < 10){ //10보다 작다면
            temp = (units * 10) + temp; //temp는 이전의 1의 자리 숫자를 10배 한 값과 자신을 더한값.
        }
        else{ //10보다 크다면
            temp = (units * 10) +(temp % 10); //이전의 1의 자리 숫자를 10배 한 값과 지금의 1의 자리를 더한 값.
        }
    }while(temp != n); //만일 temp가 n이라면 멈추기.

    cout<<answer<<endl;
    return 0;
}

'코딩테스트 > 백준_브론즈' 카테고리의 다른 글

[C++][백준 1284] 집 주소  (3) 2023.03.26
[C++][백준 9086] 문자열  (0) 2023.03.24
[C++][백준 3460] 이진수  (0) 2022.09.19
[C++][백준 13458] 시험 감독  (0) 2022.09.14
[C++][백준 5522] 카드 게임  (0) 2022.09.09
Contents

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

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