BOJ

[BOJ] 17252번 - 삼삼한 수

곰제비 2020. 4. 19. 23:45

<문제 설명>

 

 

<접근 방식>

단순 수학문제이다.

3의 거듭제곱들의 합으로 이루어져있는가라는 문장으로 보고 주어진 수를 3진법으로 바꿀 생각이 든다면 쉽게 해결 가능하다. 3진법으로 바꾸었을때 0이나 1이 아닌 2가 포함된 숫자가 나온다면 3의 거듭제곱의 합이 아니라는 뜻이다.

 

예를들어 

1) 109의 경우

109 = 81 + 27 +1 이므로 11001 -> 삼삼한 수이다.

 

2) 298의 경우

298 = 243 +27 + 27 + 1 이므로 102001 -> 삼삼한 수가 아니다.

 

 

아래는 전체 코드이다.

 

<전체 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
 
int main()
{
    int N;
    int three[100= { NULL };
    int flag = 1;
    int count = 0;
    scanf("%d"&N);
    if (N == 0)
        flag = 0;
    for (int i = 0; N > 0; i++) {
        three[i] = N % 3;
        N /= 3;
        count++;
    }
 
    for (int j = 0; j < count; j++) {
        if (three[j] == 0)
            continue;
        else if (three[j] == 1)
            continue;
        else {
            flag = 0;
            break;
        }
    }
    if (flag == 0)
        printf("NO");
    else if (flag == 1)
        printf("YES");
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

 

<문제 링크>

https://www.acmicpc.net/problem/17252

 

17252번: 삼삼한 수

첫째 줄에 2,147,483,647보다 작거나 같은 음이 아닌 정수 N이 입력된다.

www.acmicpc.net