[BOJ 1110] 백준 더하기 사이클 - C++
사용언어 : 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