N

(SWEA c++)3809. 화섭이의 정수 나열 본문

SW Expert Academy

(SWEA c++)3809. 화섭이의 정수 나열

naeunchan 2020. 11. 9. 15:21
728x90
반응형

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

 

SW Expert Academy

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

swexpertacademy.com

문자열로 수를 처리한다.

우선 string형 벡터는 구할 수 있는 정수를 string 형태로 저장하는 변수다.

check는 구할 수 없는 정수 중 가장 작은 수를 발견하면 탈출하기 위한 변수다.

마지막으로 s는 string 형태로 수를 받아서 저장하는 변수.

 

<32번째 줄>

1 자리 수 ~ n 자리의 수까지 각각 구하여 v 벡터에 저장한다.

1 자리 수부터 받아오기 때문에 pow(10, i - 1) - 1 ~ pow(10, 1) 까지 수가 v 벡터에 저장되어 있는지 확인한다.

find 함수를 이용하여 숫자를 확인하면서 j가 v 벡터에서 없다면 그 수가 가장 작은 수를 의미하므로

check = false로 바꿔주고 탈출.

바깥 for문에서 check를 검사하여 false 인 경우 탈출하여 다음 테스트 케이스로 넘어가면 된다.

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

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;
        vector<string> v;
        bool check = true;
        string s = "";
        
        cin >> n;
        for(int i = 0; i < n; i++)
        {
            int tmp;
            cin >> tmp;
            s += to_string(tmp);
        }
        
        for(int i = 1; i <= s.size(); i++)
        {
            for(int j = 0; j < s.size(); j++)
            {
                string tmp = s.substr(j, i);
                v.push_back(tmp);
            }
            for(int j = pow(10, i - 1) - 1; j < pow(10, i); j++)
            {
                if(find(v.begin(), v.end(), to_string(j)) == v.end())
                {
                    cout << "#" << tc << " " << j << endl;
                    check = false;
                    break;
                }
            }
            if(!check)
                break;
        }
    }
    return 0;
}
728x90
반응형