https://www.acmicpc.net/problem/1769
우선 문제부터 간단하게 요약하면,
3의 배수 판별법으로 1~1,000,000 자리수를 판별하려 할 때, 몇번의 변환이 일어나는가에 대한 문제입니다.
<Solution>
우선 input으로 들어오는 1백만 자리 숫자는 int 뿐만 아니라 long long 등의 자료구조로도 커버할 수 없습니다.
그래서 이 input을 한번 변환을 거쳐 int등으로 바꾼 다음 처리를 하면 됩니다.
실제 구현은 아래와 같습니다.
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char number[1000000+10];
int conversionCount;
int main(){
cin >> number;
int k = 0;
if(strlen(number) != 1){
// 첫 변환을 하면 int로 처리가능
for(int i = 0; i<strlen(number); i++){
k += number[i]-'0';
}
conversionCount++;
while(k>=10){
conversionCount++;
int tmpK = 0;
while(k >= 10){
tmpK += k%10;
k/=10;
}
tmpK += k;
k = tmpK;
}
}
else k = number[0]-'0';
cout << conversionCount << endl;
if(k == 3 || k == 6 || k == 9) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}
반응형
'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글
[LeetCode] Zigzag Conversion (1) | 2023.03.21 |
---|---|
[LeetCode] Path Sum II (0) | 2023.03.21 |
[백준] 줄 세우기 (0) | 2023.03.12 |
[백준] 용액 (0) | 2023.03.12 |
[백준] 부분합 (0) | 2023.03.05 |