본문 바로가기

Problem/ETC

[C/C++] BOJ 2529 :: 부등호

BOJ 2529 :: 부등호



문제 링크 : https://www.acmicpc.net/problem/2529





으아.. 쉬운 문제인데 오래걸렸다 ㅠㅠㅠㅠㅠ 이유는..

long long 형으로 만들어주어야 범위 초과 오류가 나지 않는데 int로 만들어 주었기 때문이었다...


10자리 숫자를 채우면 나는 그 배열을 정수로 바꾸어 주도록 함수를 만들었는데 int의 범위는 -2147483648 ~ 2147438647 이기 때문에 수를 채우다가 쓰레기값이 들어가 버린다..


이거 저번에도 신경 못 써줘서 쉬운 문제 정말 오래 푼 적이 있었는데 이번에 또... 같은 실수를 하다니....


나한테 화가 난다!!!!! 범위나 예외를 다시 한번 더 생각하고 신경써서 코딩하도록 해야겠다 ㅠ



정수를 문자열로 바꿔주기 위해서 to_string 함수를 이용하였다! 여러모로 유용한 함수!_!

반대로 문자열을 정수로 바꿔주기 위해서는 stoi 함수를 이용하면 된다!




나의 코드



Github : https://github.com/j2wooooo/Daliy_Algorithms/blob/master/Daliy_Algorithms/BOJ_2529/BOJ_2529.cpp



// 백준알고리즘 2529번 :: 부등호
#include<iostream>
#include<string>
using namespace std;
int k;
char op[10];
bool use[10];
int ans[10];
long long max_ans;
long long min_ans;
long long makenum()
{
long long num = 0;
for (int i = 0; i <= k; i++)
{
num = (num * 10) + ans[i];
}
return num;
}
void tracking(int _num, int _idx)
{
ans[_idx] = _num;
use[_num] = true;
if (_idx == k)
{
// 숫자로 만들기
long long num_ans = makenum();
if (min_ans == 0) min_ans = num_ans;
if (max_ans == 0 || max_ans < num_ans) max_ans = num_ans;
return;
}
for (int i = 0; i <= 9; i++)
{
// 사용하지 않았던 것이고 연산에 올바르면 실행
if (!use[i])
{
if (((op[_idx] == '>') && ans[_idx] > i) || ((op[_idx] == '<') && ans[_idx] < i))
{
tracking(i, _idx + 1);
ans[_idx + 1] = 0;
use[i] = false;
}
}
}
}
int main(void)
{
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> op[i];
}
for (int i = 0; i <= 9; i++) {
tracking(i, 0);
use[i] = false;
}
string max_val = to_string(max_ans);
string min_val = to_string(min_ans);
if (max_val.length() != k + 1) cout << "0" + max_val << '\n';
else cout << max_val<<'\n';
if (min_val.length() != k + 1) cout << "0" + min_val << '\n';
else cout << min_val<<'\n';
return 0;
}