코딩테스트

정올 숫자근 c++

leeeehhjj 2024. 2. 8. 13:53

문제

각 자리수를 계속 더하여 한 자리 숫자를 만드는 것을 숫자근(Digit Root)이라고 한다. 예를 들어 정수 65,536 의 숫자근은 7이다, 그것은 6+5+5+3+6=25 이고 이를 다시 2+5=7 이기 때문이다.

 

n 개의 정수가 입력되면 숫자근이 가장 큰 값을 찾는 프로그램을 작성하시오.

입력

입력의 첫 줄에 정수의 개수 n(2≤n≤1,000)이 들어온다. 그 다음줄 부터 n개의 정수 m_i(1≤m_i≤1,000,000)가 한 줄에 한 개씩 들어온다.

출력

숫자근이 가장 큰 정수를 출력한다. 단, 가장큰 숫자근이 여러 개이면 그 중 가장 작은 수를 출력한다.

 

예제

login입력
5
213
61
153
95
753
 
logout출력
153

 

 

#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN ((int)1e3)
int N;//정수개수
int A[MAXN + 10];//입력 정수
void InputData(){
    cin >> N;
    for (int i=0; i<N; i++){
        cin >> A[i];
    }
}
 
int main(){
    int ans = -1;
    InputData();//입력 받는 부분
 
    //여기서부터 작성
    sort(A,A+N);
    int idx = 0;
    for (int i=0; i<N; i++) {
        int tmp = A[i];
        int sum;
        while (tmp >= 10)
        {
            sum = 0;
            while (tmp > 0)
            {
                sum += tmp%10;
                tmp /= 10;
            }
            tmp = sum;
        }
 
        if (ans < tmp) {
            idx = i;
            ans = tmp;
        }
         
    }
 
    ans = A[idx];
    cout << ans << endl;//출력하는 부분
    return 0;
}