2022년 5월 12일에 작성됨
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
문제 분석
수 입력(26)-> 각 자리 숫자의 합(2+6=8)-> 원래 수의 맨오른쪽 숫자(6)와 구한 합의 맨 오른쪽 숫자(8)를 합쳐서 새로운 수(68) 만듦.
이 과정을 반복하여 원래 수로 돌아오기 까지 실행한 횟수(사이클)를 구하는 것.
소스 코드(⭕)
#include <stdio.h>
int main(void)
{
int num1, num2, cycle = 0; // cycle은 0으로 시작
scanf("%d", &num1);
num2 = num1;
while (1) { // while(1) : 무한 루프를 수행하는 반복문
num1 = (num1 % 10) * 10 + ((num1 / 10 + num1 % 10) % 10);
cycle++; // while문이 한 번 시행될 때마다 1씩 증가
if (num1 == num2) // 초깃값과 새로운 수가 일치한다면 while문 탈출
break;
}
printf("%d", cycle);
return 0;
}
코드 분석
1. 맨 처음 입력 받은 수 num1을 while 문으로 들어가기 전에 num2에 저장해준다. while 문으로 들어가면 num1이 계속해서 새로운 수로 바뀌기 때문이다.
2. 그 다음 무한 반복문을 정의한 뒤, 새로운 수를 만드는 연산식을 세워주고, 식이 한 번 시행될 때 마다 cycle이 1씩 증가하게 해준다. (여기서 'cycle'은 while 루프가 반복된 횟수로, 0으로 시작하여 while 문이 한 번 시행될 때 마다 1씩 증가함)
3. 마지막으로, num2에 저장되어 있는 초깃값과 새로운 수인 num1이 일치한다면 while 문을 빠져나가도록 한다.
end
while 문이 아직 익숙하지 않아서 더 꼼꼼하게 코드를 분석해봤다.
코드 줄마다 의미를 이해하고 나니까 while 문의 구조에 대해 어느정도 감이 오기 시작한다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]코드업_1068 : [기초-조건/선택실행구조] 정수 1개 입력받아 평가 출력하기(설명) (0) | 2023.04.19 |
---|---|
[C]코드업_1065 : [기초-조건/선택실행구조] 정수 3개 입력받아 짝수만 출력하기(설명) (0) | 2023.04.18 |
[C]백준_2741 : N 찍기 (0) | 2023.04.16 |
[C]백준_2525 : 오븐 시계 (2) | 2023.04.15 |
[C]백준_2884 : 알람 시계 (0) | 2023.04.14 |
2022년 5월 12일에 작성됨
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
문제 분석
수 입력(26)-> 각 자리 숫자의 합(2+6=8)-> 원래 수의 맨오른쪽 숫자(6)와 구한 합의 맨 오른쪽 숫자(8)를 합쳐서 새로운 수(68) 만듦.
이 과정을 반복하여 원래 수로 돌아오기 까지 실행한 횟수(사이클)를 구하는 것.
소스 코드(⭕)
#include <stdio.h>
int main(void)
{
int num1, num2, cycle = 0; // cycle은 0으로 시작
scanf("%d", &num1);
num2 = num1;
while (1) { // while(1) : 무한 루프를 수행하는 반복문
num1 = (num1 % 10) * 10 + ((num1 / 10 + num1 % 10) % 10);
cycle++; // while문이 한 번 시행될 때마다 1씩 증가
if (num1 == num2) // 초깃값과 새로운 수가 일치한다면 while문 탈출
break;
}
printf("%d", cycle);
return 0;
}
코드 분석
1. 맨 처음 입력 받은 수 num1을 while 문으로 들어가기 전에 num2에 저장해준다. while 문으로 들어가면 num1이 계속해서 새로운 수로 바뀌기 때문이다.
2. 그 다음 무한 반복문을 정의한 뒤, 새로운 수를 만드는 연산식을 세워주고, 식이 한 번 시행될 때 마다 cycle이 1씩 증가하게 해준다. (여기서 'cycle'은 while 루프가 반복된 횟수로, 0으로 시작하여 while 문이 한 번 시행될 때 마다 1씩 증가함)
3. 마지막으로, num2에 저장되어 있는 초깃값과 새로운 수인 num1이 일치한다면 while 문을 빠져나가도록 한다.
end
while 문이 아직 익숙하지 않아서 더 꼼꼼하게 코드를 분석해봤다.
코드 줄마다 의미를 이해하고 나니까 while 문의 구조에 대해 어느정도 감이 오기 시작한다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]코드업_1068 : [기초-조건/선택실행구조] 정수 1개 입력받아 평가 출력하기(설명) (0) | 2023.04.19 |
---|---|
[C]코드업_1065 : [기초-조건/선택실행구조] 정수 3개 입력받아 짝수만 출력하기(설명) (0) | 2023.04.18 |
[C]백준_2741 : N 찍기 (0) | 2023.04.16 |
[C]백준_2525 : 오븐 시계 (2) | 2023.04.15 |
[C]백준_2884 : 알람 시계 (0) | 2023.04.14 |