하루 1문제 챌린지/Silver1

백준 2529번 부등호(C++) 🚩

그린푸딩 2024. 3. 1. 22:53
728x90
반응형

서로 다른 3글자라서 조합을 nCm 해야하나? 했는데 결국 순서가 정해질테고 그냥 제일 상위몇개만 하면되었다.. 어렵다

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

using namespace std;

//숫자 배열을 문자열로 

string turn(vector<int>arr){
    
    string tmp="";
    for(int i=0;i<arr.size();i++){
        tmp+=(arr[i]+'0');
    }
    return tmp;
}

bool cal(vector<int>tmp,vector<char>arr){
    
    for(int i=0;i<tmp.size()-1;i++){
        int a=tmp[i];
        char c=arr[i];
        int b=tmp[i+1];
        
        if(c=='<'){
            if(!(a<b))return false;
        }
        if(c=='>'){
             if(!(a>b))return false;
        }
        
    }
    return true;
    
}    

int main()
{
    int n;
    cin>>n;
    vector<char>arr(n);
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
   
   //조합을 해야하지 않을까? 했는데 그냥 상관업나 
   
   vector<int>mins(n+1);
   vector<int>maxs(n+1);
        
   for(int i=0;i<n+1;i++){
       mins[i]=i;
       maxs[i]=9-i; 
   }   
   
    vector<string>ans(2);
    
    do{
      
       
        if(cal(maxs,arr)){
         
            ans[0]=turn(maxs);
            break;
        }
       
        
    }while(prev_permutation(maxs.begin(),maxs.end())); 
    
    do{
      if(cal(mins,arr)){
            
            ans[1]=turn(mins);
          
            break;
        }
       
        
    }while(next_permutation(mins.begin(),mins.end())); 
    
    
    for(int i=0;i<2;i++){
        cout<<ans[i]<<'\n';
    }
   
    return 0;
}
728x90
반응형