https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
문제 설명
백준의 문제 - 단계별로 풀어보기의 [반복문] 의 1110 더하기 사이클문제입니다.
일정한 공식에 따라 계산을 하였을 때, 처음 입력 받은 숫자로 몇 번만에 되돌아 가는지 횟수를 구하는 문제입니다.
숫자를 n으로 하였을 때,
1. n의 1의 자리를 새로운 숫자의 10의 자리로 변경
2. n의 1의 자리 숫자 + n의 10의 자리 숫자가 새로운 숫자의 1의 자리로 변경
(단, 더한 값이 십의 자리인 경우 1의 자리 숫자를 사용한다.)
이전 곱셈 문제처럼 자리 수를 구할 때는 나머지 연산자(%)와 나누기 연산자(/)를 활용하였습니다.
1. ten = temp % 10 * 10;
2.
one = temp / 10 + temp % 10;
if(one >= 10)
{
one = one % 10;
}
코드 (C언어)
#include<stdio.h>
int main(void)
{
int count = 1, n, temp, ten, one;
scanf("%d", &n);
temp = n;
while(1)
{
ten = temp % 10 * 10;
one = temp / 10 + temp % 10;
if(one >= 10)
{
one = one % 10;
}
temp = ten + one;
if(n == temp)
{
break;
}
else
{
count++;
}
}
printf("%d", count);
return 0;
}
if문으로 one을 검사하는 부분을 조건연산자로 대체하여, one, ten 변수 없이 구현할 수 있습니다.
#include<stdio.h>
int main(void)
{
int count = 1, n, temp;
scanf("%d", &n);
temp = n;
while(1)
{
temp = (temp % 10 * 10) + ((temp / 10 + temp % 10) >= 10 ? (temp / 10 + temp % 10) % 10 : (temp / 10 + temp % 10));
if(n == temp)
{
break;
}
else
{
count++;
}
}
printf("%d", count);
return 0;
}
'코딩' 카테고리의 다른 글
[C언어] 백준 BOJ 2441 별 찍기 4 (0) | 2022.07.22 |
---|---|
[C언어] 백준 BOJ 2440 별 찍기 3 (0) | 2022.07.21 |
[C언어] 백준 BOJ 10951 A+B-4 - 김두루미 (0) | 2022.07.19 |
[C언어] 백준 BOJ 10952 A+B-5 - 김두루미 (0) | 2022.07.18 |
[C언어] 백준 BOJ 10871 X보다 작은 수 - 김두루미 (0) | 2022.07.17 |