새소식

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

[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; }

Contents

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

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