Fascination
article thumbnail
Published 2021. 10. 3. 02:12
[C++] BOJ 1769 : 3의 배수 CODE/BOJ

[문제]

 

1769번: 3의 배수

문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를

www.acmicpc.net

 

 

 

[문제 풀이]

- 한자리씩 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
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!