1248_guess(어렵구만)

이준혁·2025년 12월 18일

예제 입력 1
4
-+0++++--+
예제 출력 1
-2 5 -3 1

예제 입력 2
2
+++
예제 출력 2
3 4

예제 입력 3
5
++0+-+-+--+-+--
예제 출력 3
1 2 -3 4 -5

공부

  • 해당 코드를 공부하면서 시간을 많이 쓴것 같음
  • 허나재귀 파트의 마지막 문제라서 조금더 집중을 한것같음
  • 해당부분에서 중요한것은 이 세가지라고 생각함
  1. 함수시작에 원하는 개수가 내가 input한 개수와 일치할 경우 그 최종결과를 출력하는것
  2. return과 continue를 활용하여 넘어갈 것은 if을 통해 확인하고 바로 넘어가기 그리고 줄 넘버는 바로 주기
  3. return을 수치를 return 하는것이 아닌 bool을 return함으로써 현재 그 수치가 이 안에 들어와도 되는지 확인하기

이렇게 되는것 같은데

즉 브루토포스로 수치를 다때려 박으면서 재귀를 통해 계속 자기자신을 반복하는것임
그리고 앞서 말할것 처럼 이 방법이 맞는지 확인하고 아니면 바로 돌아가는 것으로 다시 돌아가서 확인하는 백트래킹으로 진행하는것임

코드

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

using namespace std;

char input_num_index[10][10];

int count_num;

int result[10];

bool check_num(int count_void)
{
    int sum = 0;
    for(int i = count_void;i>=0;i--)
    {
        sum = sum+result[i];
        if(input_num_index[i][count_void]=='+'&&sum<=0)
        return false;
        if(input_num_index[i][count_void]=='-'&&sum>=0)
        return false;
        if(input_num_index[i][count_void]=='0'&&sum!=0)
        return false;
    }
    return true;
}

void bfs(int count_void)
{
    if(count_void == count_num)
    {
        for(int i = 0 ; i<count_void;i++)
        {
            cout<<result[i]<<" ";
        }
        exit(0);
    }

    for(int i = -10;i<=10;i++)
    {
        if(input_num_index[count_void][count_void]=='+' && i<=0) continue;
        if(input_num_index[count_void][count_void]=='-'&& i>=0) continue;
        if(input_num_index[count_void][count_void]=='0'&& i!=0) continue;

        result[count_void] = i; 

        if(check_num(count_void)==true)
        {
            bfs(count_void+1);
        }
    }
}

int main()
{
    int input_bo_index = 0;

    string input_bo;

    cin>>count_num;

    cin>>input_bo;

    for(int i = 0;i<count_num;i++)
    {
        for(int j = i; j<count_num;j++)
        {
            input_num_index[i][j]=input_bo[input_bo_index++];
        }
    }

    bfs(0);
}
profile
#자기공부 #틀린것도많음 #자기개발 여러분 인생이 힘들다 하더라도 그것을 깨는 순간 큰 희열감으로 옵니다~

0개의 댓글