APS/백준

[2252] 줄 세우기 C++

문래동까마귀 2022. 4. 18. 19:43

https://www.acmicpc.net/problem/2252

 

2252번: 줄 세우기

첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의

www.acmicpc.net

- PASS

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

using namespace std;

vector<vector<int>> vec;
vector<int> result;
int N, M;
int visit[32001];

void dfs(int num) {
	visit[num] = 1;

    for (auto i : vec[num]) {
        if (visit[i])
            continue;
        dfs(i);
    }

    result.push_back(num);
}

int main() {

    cin >> N >> M;

	vec.resize(N + 1);

    for (int i = 0; i < M; i++) {
        int A, B;
        cin >> A >> B;
		vec[A].push_back(B);
    }

    for (int i = 1; i <= N; i++) {
        if (visit[i]==0)
            dfs(i);
    }

	for (int i = N - 1; i >= 0; i--)
		cout << result[i] << " ";

    return 0;
}

- FAIL

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

using namespace std;

int main() {

	vector<int> row;

	int N, M;

	cin >> N >> M;

	for (int i = 0; i < M; i++) {
		int A, B;
		cin >> A >> B;
		int flag = 0;
		for (int j = 0; j < row.size(); j++) {
			if (row[j] == B) {
				row.insert(row.begin() + j, A);
				flag = 1;
				break;
			}
		}

		if (flag == 0) {
			row.push_back(A);
			row.push_back(B);
		}
	}

	for (int i = 0; i < N; i++)
		cout << row[i] << " ";
        
    return 0;
}