본문 바로가기

알고리즘/BOJ

6378번

6378번 - 디지털 루트


정답률에 비해서 생각보다 쉬운 문제였다.


문제의 핵심은 1000자리의 숫자는 정수형 변수로 표현할 수 없기 때문에 문자열로 표현한다는 점인 것 같다.


따라서 string 객체로 해당하는 문자를 받아들이고, 그 문자를 한 문자씩 읽어들이면서 값을 계산하는 과정을 반복하면 된다.


getNum 함수에서 for문을 돌면서 각 자리의 수를 더해서 ret 라는 정수 배열에 넣어준다.


그리고 ret 라는 값이 10 이상이면 다시 ret 값을 string 으로 바꾸고 재귀함수를 구현한다.


만약 ret 값이 원하는 한자리 수 값이 되면 리턴하면서 출력한다.



###

to_string : <string> 헤더 파일에 있는 int 형 변수를 string으로 변환시켜주는 함수


<정답 코드>


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
35
36
#include<iostream>
#include<string>
using namespace std;
 
int getNum(string& s)
{
    int ret = 0;
    for (int i = 0; i < s.size(); i++)
    {
        ret += s[i] - '0';
    }
 
    if (ret >= 10) {
        s = to_string(ret);
        ret = getNum(s);
    }
 
    return ret;
 
}
 
int main()
{
    while (true)
    {
        string s;
        cin >> s;
 
        if (s == "0")
            break;
 
        cout << getNum(s) << endl;
    }
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

1331번  (0) 2018.07.15
1952번  (0) 2018.07.15
2636번  (0) 2018.07.14
12761번  (0) 2018.07.14
15683번  (6) 2018.07.14