CodingTest/BOJ

[BOJ 1110] 백준 더하기 사이클 - C++

황수진 2022. 4. 2. 18:18

사용언어 :  C++

 

 

 

 

 

문제풀이

 

(1) 필요한 변수

N(int), count(int), result(int)

N : 처음에 입력 받은 이후엔 계속 고정되는 원래의 값

count : 출력에서 요구하는 값

result : N과 비교할 수 있는 일시적인 결과값

	int N;
	int count = 0; 
	cin >> N;
	int result = N;

이 때, result값은 임의로 N값으로 초기화 해준다. 

 

 

(2) 반복문 구성 (+ result 값 계산)

우선 무한루프를 돌려준다.

적어도 한 번은 계산해줘야 함! (문제 자체가 계산을 몇 번 하는 건지 요구하는 것 + result를 N으로 초기화했기 때문에 당연히 처음엔 result와 N은 같음)

result 의 10의 자릿수 : 이전 값의 1자릿수 (26이면 6) => result%10 

result 의 1의 자릿수 : 이전 값의 10자릿수와 1의 자릿수를 더한 값의 1자릿수 => (result/10 + result%10) % 10

while (true) {
		result = (result % 10) * 10 + (result / 10 + result % 10) % 10;
		count++;
		if (result == N)
			break;
	}

( 이 때, 1의 자릿수에선 마지막에 10으로 꼭 나눠줘야 합니다! 1의 자릿수만 사용하기 때문)

* 10의 자릿수는 10으로 곱해줘야 합니다. 위의 값은 말 그대로 '자릿수'이기 때문

 

 

 

 

전체코드

 

#include<iostream>
using namespace std;

int main() {
	int N;
	int count = 0; 
	cin >> N;
	int result = N;
	while (true) {
		result = (result % 10) * 10 + (result / 10 + result % 10) % 10;
		count++;
		if (result == N)
			break;
	}
	cout << count;
}

 

처음엔 헷갈리지 않도록 tmp 변수를 하나 더 생성해서 새로운 result 값을 만들어줄 때 사용하는 변수로 이용했다. 그런데 굳이 하나 더 둘 필요 없이 result로 해결할 수 있어서 바꿨다. (더 간결해짐)

 

 

 

 

총평

 

브론즈 1 문제인만큼 어려움 없이 풀 수 있었던 것 같다 !

휴학하고 푹 쉬다가 오랜만에 문제를 푸니까 출력하는 법도 손에 안익었다 ㅎ 

노트에 풀이방법을 차근차근 정리하면서 풀면 수월하게 풀 수 있는 문제다


문제 출처

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

 

1110번: 더하기 사이클

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

www.acmicpc.net