728x90
1. 문제
2. 문제 이해
입력 : 26
2+6 = 8 -> 68
6+8 = 14 -> 84
8+4 = 12 -> 42
4+2 = 6 -> 26
출력 : 4
앞의 수의 1의 자리수가 다음 수의 10의 자리수가 되며,
앞의 자리 수 각각을 더한 값의 1의 자리수가 다음 수의 1의 자리가 된다.
3. 접근
N의 10의 자리수와 1의 자리수를 더해 return 하는 방식으로 코드를 짰더니 8번이나 넘는 오답이 발생해 다시 보니 문제를 잘못 이해했었다.
#include <stdio.h>
int main() {
int N, a, b, num, cnt=0;
scanf_s("%d", &N);
a = N / 10; // N의 10의 자리
b = N % 10; // N의 1의 자리
while(1) {
num = 10 * b + (a + b) % 10; // (N의 10의 자리 수+1의 자리수)%10은 다음 N의 1의자리수, N의 1의 자리수 * 10= 다음 N의 10의 자리수
cnt++;
if (num == N)
break;
}
printf("%d", cnt+1);
}
문제를 바르게 이해한 후에 작성한 코드인데, visual studio 에서는 실행이 되더니, 백준 입력창에 넣으니 시간초과 오류가 발생했다.
#include <stdio.h>
int main() {
int N, cnt=0;
scanf_s("%d", &N);
int init = N;
while(1) {
N = N % 10 * 10 + (N / 10 + N % 10) % 10 ; // (N의 10의 자리 수+1의 자리수)%10은 다음 N의 1의자리수, N의 1의 자리수 * 10= 다음 N의 10의 자리수
cnt++;
if (N == init) {
printf("%d", cnt);
break;
}
}
return 0;
}
이렇게 작성했더니, 시간 초과 오류가 발생했다.
4. 최종 답안
#include <stdio.h>
int main() {
int N, cnt=0;
scanf_s("%d", &N);
int init = N;
while(1) {
N = (N / 10 + N % 10) % 10 + N % 10 * 10; // (N의 10의 자리 수+1의 자리수)%10은 다음 N의 1의자리수, N의 1의 자리수 * 10= 다음 N의 10의 자리수
cnt++;
if (N == init) {
printf("%d", cnt);
break;
}
}
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
[C] 백준 2908 : 상수 (0) | 2022.05.24 |
---|---|
[C] 백준 1152 : 단어의 개수 (0) | 2022.05.24 |
[C] 백준 1978 : 소수찾기 (0) | 2022.05.20 |
[C] 백준 14681 : 사분면 고르기 (0) | 2022.05.16 |
[C] 백준 2753 : 윤년 (0) | 2022.05.16 |