본문 바로가기
백준 문제 풀이 & C++ 공부

백준 2529 C++

by daisy0461 2024. 3. 6.

https://www.acmicpc.net/status?user_id=jjune0461&problem_id=2529&from_mine=1

 

채점 현황

 

www.acmicpc.net

 

solved.ac 기준으로 실버인데 틀려서 자존심 상해서 다신 안틀리기 위해 복습...

일단 여기서 틀린 이유

  1. to_string()의 존재를 생각 못함.
  2. char끼리 비교하면 되는데 char를 int로 바꿔서 하려다가 방법이 생각이 안나서 복잡하게 만듦.
  3. 제일 어이없는 건데 계속 다시 풀다가 전역변수와 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