https://www.acmicpc.net/status?user_id=jjune0461&problem_id=2529&from_mine=1
채점 현황
www.acmicpc.net
solved.ac 기준으로 실버인데 틀려서 자존심 상해서 다신 안틀리기 위해 복습...
일단 여기서 틀린 이유
- to_string()의 존재를 생각 못함.
- char끼리 비교하면 되는데 char를 int로 바꿔서 하려다가 방법이 생각이 안나서 복잡하게 만듦.
- 제일 어이없는 건데 계속 다시 풀다가 전역변수와 main 함수 안에 변수를 동일한 걸 써서 찾지 못해 시간을 오래 잡아먹음.
일단 로직에 대해서 방문한건 방문처리하고 check함수는 잘 만들었다.
그저 비교하는 방식을 너무 꼬아서 생각해서 이렇게 실패했다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n; //부등호의 갯수 - > 숫자의 갯수는 총 n+1개가 들어온다.
char ops[100];
int resultIndex = 0;
int visited[10];
vector<string> results;
bool check(char a, char b, char op)
{
if (a < b && op == '<') return true;
if (a > b && op == '>') return true;
return false;
}
void select(int index, string num) {
//cout << "index : " << index << "\n";
if (index == n + 1) {
//cout << "result string : " << num << " index : " << index << "\n";
results.push_back(num);
resultIndex++;
return;
}
for (int i = 0; i < 10; i++) {
if (visited[i]) continue;
if(index == 0 || check(num[index - 1], i + '0', ops[index - 1])) {
visited[i] = 1;
//cout << "push string after compare: " << num + to_string(i) << "\n";
select(index + 1, num + to_string(i));
visited[i] = 0;
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
cin >> ops[i];
}
//cout << "n+ 1 :" << n + 1 << "\n";
select(0, "");
cout << results[resultIndex - 1] << "\n" << results[0];
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 9934 C++ (0) | 2024.03.11 |
---|---|
백준 3197 C++ (0) | 2024.03.06 |
백준 4179 C++ (0) | 2024.02.20 |
백준 15686 C++ (0) | 2024.02.15 |
백준 17298 C++ (1) | 2024.02.14 |