N

(SWEA c++)6190. 정곤이의 단조 증가하는 수 본문

SW Expert Academy

(SWEA c++)6190. 정곤이의 단조 증가하는 수

naeunchan 2020. 11. 18. 17:32
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWcPjEuKAFgDFAU4&categoryId=AWcPjEuKAFgDFAU4&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

최대 1000자리인 수를 저장하기 위해 int형 배열 v를 선언하고,

각 자리수에 해당하는 수를 for문을 통해 저장한다.

 

답을 찾기 위해 이중 for문을 이용한다.

우선 v[i] * v[j]를 통해 현재 값보다 큰 지 확인을 한다.

 

만약 v[i] * v[j]가 크다면 단조 증가 수를 확인하도록 한다.

while문을 통해

각 자리수를 돌면서 확인하면서, 단조증가수가 아니면 check = false로 바꿔주고 탈출하도록 한다.

check = true라면 단조 증가 수가 맞기 때문에 ans = tmp로 바꿔주도록 한다.

 

이를 완전탐색으로 하면 답을 구할 수 있다.

#include <iostream>

using namespace std;

int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int t;
    cin >> t;
    
    for(int tc = 1; tc <= t; tc++)
    {
        int N, ans = -1, current = 0;
        int v[1000];
        
        cin >> N;
        
        for(int i = 0; i < N; i++)
            cin >> v[i];
        
        for(int i = 0; i < N; i++)
        {
            for(int j = i + 1; j < N; j++)
            {
                bool check = true;
                int tmp = v[i] * v[j];
                
                if(ans < tmp)
                {
                    int num = tmp;
                    while(num)
                    {
                        if(num % 10 < (num / 10) % 10)
                        {
                            check = false;
                            break;
                        }
                        num /= 10;
                    }
                    
                    if(check)
                        ans = tmp;
                }
            }
        }
        cout << "#" << tc << " " << ans << endl;
    }
    return 0;
}
728x90
반응형