Algorithm

[BOJ] 2529번 "부등호" (C++)

meenyweeny 2021. 8. 25. 14:37

브루트포스 문제를 연습해보려고 카테고리에서 고른 문제

 

문제에서 선택된 숫자는 모두 달라야 한다고 해서 숫자의 방문 여부를 표시해주는 bool 배열을 사용하며 재귀로 구현해야겠다고 생각했다

 

근데 난 재귀에 자신이 없다 하하

.

.

 

또, 출력 정수는 문자열이어야 한다고 해서 애초에 답 저장을 vector에 string으로 넣었다 (to_string 함수를 써서)

그리고 0부터 9까지 방문 여부를 확인하며 하나씩 탐색하기 때문에, 이미 ascending order로 정렬되어있을 것이다

 

조건을 만족하는 수면 string에 to_string으로 하나씩 붙여주고,

재귀함수의 파라미터로 답을 저장한 문자열, 지금 몇번째 재귀(?)인지, 바로 전 숫자가 뭔지(비교해야하니까) 넘겨줬다

그런데 정답이 아니었을때 처리나, 문자열을 넘겨주는 상태 등등에서 계속 오류가 나는 것 같았다..

 

엄청나게 고쳐서

 

맞았다~!!

 

근데 다른 사람들 채점 결과랑 비교해보니까

아주 형편없다

하지만 오래 걸려서 풀었기 때문에

브루트포스, 특히 재귀함수 더 공부하고

다시 풀어보거나 다른 아이디어 생각나서 다시 풀어보면

메모리도..

시간도..

줄일수..

있겠지..

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int k;
char info[9];
vector<string> v;
bool visited[10];

void func(string ans,int turn,int before){
    
    if(turn==k+1){
        v.push_back(ans);
        return;
    }
    
    for(int i=0; i<10; i++){
        if(!visited[i]){ //방문된 적 없는 수에 한해서만 가능
            if(info[turn-1]=='<'){
                if(i>before){
                    visited[i]=true;
                    ans+=to_string(i);
                }
                
                else
                    continue;
            }
            
            else if(info[turn-1]=='>'){
                if(i<before){
                    visited[i]=true;
                    ans+=to_string(i);
                }
                else
                    continue;
            }
            
            func(ans,turn+1,i);
            ans.pop_back();
            visited[i]=false;
        }
    }
}

int main(){
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
    
    cin>>k;
    
    for(int i=0; i<k; i++)
        cin>>info[i];
    
    for(int i=0; i<10; i++){
        string ans;
        visited[i]=true;
        ans+=to_string(i);
        func(ans,1,i);
        ans.pop_back();
        visited[i]=false;
    }
    
    cout<<v[v.size()-1]<<endl;
    cout<<v[0]<<endl;
}

'Algorithm' 카테고리의 다른 글

[BOJ] 2309번 "일곱 난쟁이" (C++/Swift)  (0) 2022.08.06
[BOJ] 2798번 "블랙잭" (C++/Swift)  (0) 2022.08.06
[BOJ] 14889번 "스타트와 링크" (C++)  (0) 2021.08.25