[백준 BOJ] 1110번 더하기 사이클 (C++/cpp)

2022. 5. 10. 00:39PS (Program Solving)/BOJ (백준)

문제 설명

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

백준 BOJ 1110번 더하기 사이클 문제 사진1
백준 BOJ 1110번 더하기 사이클 문제 사진2

 

접근 방법 - 자릿수에 대한 연산 문제

백준의 1110번 문제는 각 자릿수에 대한 연산을 응용하여 해결해야 하는 문제이다.

해당 문제는, 특정 규칙에 따라 십의 자릿수와 일의 자릿수를 변경하면서 처음 숫자로 돌아오는 사이클의 개수를 출력해야 하는 문제이다.

문제에서 설명하는 규칙을 보면, 어떤 숫자에 대한 자릿수를 추출하는 방법을 알고 있어야 한다.

필자는 이때 do-while문을 활용하여 위 규칙을 코드로 구현해보았다. (최소 사이클 한 번은 꼭 실행해야 하기 때문이다.)

위 규칙의 구현에 어려움을 겪고 있다면 아래 코드의 do-while문과 이에 관련한 설명을 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 연산을 수행할 값(n)을 입력받는다.

 

2) 사이클 연산을 수행할 시 사용할 변수 num을 n으로 초기화하여 선언한다.

그리고 사이클의 개수를 카운팅할 변수 count를 0으로 초기화하여 선언한다.

 

3) do-while문을 사용하여 아래의 연산을 취한다.

(이 반복문은 num과 이의 초기값인 n과 같아질 때, 즉 사이클을 종료할 조건이 충족될 시에 실행을 멈춘다.)

- sum을 선언한 뒤, num의 십의 자리와 일의 자리를 더한 값으로 초기화한다.

- 만일 여기서 sum의 값이 두 자릿수를 갖게 된다면, 일의 자릿수만 남기도록 한다.

- num 값의 일의 자릿수를 십의 자릿수로 두고 앞에서 연산한 sum 값을 일의 자릿수로 두어, num의 값을 변경한다.

- 이렇게 하면 하나의 사이클이 끝난다. 이를 카운팅하기 위해, count에 1을 더하고 다음 사이클을 진행한다.

 

4) 3)에서 사이클이 종료될 시, 최종적으로 저장된 count의 값을 출력하고 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 1110번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;

	int num = n;
	int count = 0;
	do {
		int sum = num / 10 + num % 10;
		if (sum >= 10) { sum %= 10; }
		num = (num % 10) * 10 + sum;
		count++;
	} while (num != n);
	cout << count << endl;
}

 

제출 결과

백준 BOJ 1110번 더하기 사이클 문제 C++ 제출 결과

(2022.03.24 백준 1110번 문제 제출 결과)

반응형