[문제]
[문제 풀이]
- 한자리씩 char 배열에 저장
- 배열에 저장된 수들을 int형으로 바꿔서 더함
- 더한 값이 한자리 수가 될 때까지 위의 과정을 반복
- 더한 값이 한자리 수 중 3, 6, 9가 아니면 3의 배수가 아니므로 NO를 출력하고 조건을 만족하면 YES를 출력
[코드]
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
void cal(char num[]);
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
char num[1000001];
cin >> num;
cal(num);
}
void cal(char num[])
{
int count = 0;
int sum;
while(strlen(num)>1)
{
sum = 0;
for (int i = 0; i < strlen(num); i++)
{
sum += num[i] - '0';
}
sprintf(num,"%d",sum); // 배열 버퍼에 일련의 문자와 값의 형식을 지정하고 저장
count++;
}
cout << count<< endl;
if (stoi(num) != 3&&stoi(num)!=6&&stoi(num)!=9)
cout << "NO";
else
cout << "YES";
}
[채점 결과]
* 시간초과: 처음에 재귀호출로 풀려다가 실패,, 결국 포기
--> 시간초과 해결하기 위해서 문자열로 받고 이를 정수로 바꿔 int 형 변수에 더함
* sprintf: 배열 버퍼에 일련의 문자와 값의 형식을 지정하고 저장
'CODE > BOJ' 카테고리의 다른 글
[C++] BOJ 13706 : 제곱근 (0) | 2021.10.03 |
---|---|
[C++] BOJ 10829 : 이진수 변환 (0) | 2021.10.03 |
[C++] BOJ 2941 : 크로아티아 알파벳 (0) | 2021.10.02 |
[C++] BOJ 15953 : 상금 헌터 (0) | 2021.10.02 |
[C++] BOJ 5086 : 배수와 약수 (0) | 2021.10.02 |