코딩테스트/코드업

3의 배수 판별하기 C++(1990)[코드업,code up]

멍토 2019. 12. 19.

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀 더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소입니다.

https://codeup.kr/problem.php?id=1990

 

3의 배수 판별하기

입력은 자연수 $n$이 주어지며, 범위는 $0<n<10^{500}$입니다.< p=""> </n<10^{500}$입니다.<>

codeup.kr


1. 문제

2. 문제 해석

3. 소스 코드


문제

자연수 n이 입력되면 3의 배수인지 아닌지 판별하시오.

입력

입력은 자연수 nn이 주어지며, 범위는 0<n<10^5000<n<10^500입니다.

출발

33의 배수이면 11을 출력하고, 아니면 00을 출력한다.

입력 예시

3321

출력 예시

1

2. 문제풀이

처음에는 단순하게 별 생각없이 int를 이용해서 풀었습니다.

당연하게도 10^500이기 때문에 자리수를 벗어났습니다.

 

그래서 이 자리수면 unside long long도 안될텐데 하면서 시도를 해봤습니다.

역시 되지않더군요.

string으로 받아서 stoull로 바꾸는것도 되지않을테고....

 

고민을 하던 와중에 다른분이 3의 배수는 자리수를 더한거를 3으로 나눠보면 된다고 알려주셨습니다.

그래서 한자리수씩 더해서 3으로 나누었더니 문제가 풀렸습니다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string a;
    int sum{};
    cin >> a;
    //반복문을 이용해서 한글자씩 접근;
    //char는 -'0'을 하면 숫자가 된다.
    for (auto t : a)     sum += t - '0';
    //sum을 3으로 나눈값이 0이라면 3의 배수이다.
    if (!(sum % 3))    cout << 1 << endl;
    else    cout << 0 << endl;
    return 0;
}

 

댓글

💲 광고입니다.