리셋 되지 말자

[백준 9466] 텀 프로젝트 본문

알고리즘

[백준 9466] 텀 프로젝트

kyeongjun-dev 2020. 3. 12. 17:07
#include<iostream>
#include<stack>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	
	int cas;
	cin >> cas;
	while (cas--) {
	
	
	stack<pair<int, int>>s;


	int account = 0;
	int num = 0;
	int len;
	cin >> len;
	int *arr = new int[len + 1]();
	int *visit = new int[len + 1]();

	for (int i = 1; i < len + 1; i++) {
		cin >> arr[i];
	}


	for (int i = 1; i < len + 1; i++) {
		num = 0;
		if (visit[i] == 0) {
			visit[i] = 1;
			s.push(make_pair(i, arr[i]));
			int next = arr[i];
			while (visit[next] == 0) {
				s.push(make_pair(next, arr[next]));
				visit[next] = 1;
				next = arr[next];
			}
			if (!s.empty()) {
				while (1) {
					if (s.empty()) {
						num = 0;
						break;
					}
					if (s.top().first == next) {
						num++;
						break;
					}
					num++;
					s.pop();
				}
				while (!s.empty())
					s.pop();
			}
			account += num;
		}

	}
	cout << len - account << '\n';

	
	delete[] arr;
	delete[] visit;
}

	return 0;
}

DFS 문제인건 알았는데, 스택 안쓰고 1차원 배열 두개로만 해결하려다가 7시간동안 안풀려서 포기....

Stack으로 푸니까 바로 성공... ㅠ_ㅠ

'알고리즘' 카테고리의 다른 글

[백준] N과M(1)  (0) 2020.05.17
[백준]N와 M(1)  (0) 2020.04.25
재귀로 짠 수열(?)  (0) 2020.04.25
[백준 1697] 숨바꼭질  (0) 2020.03.11
[백준 7576]토마토  (0) 2020.03.11
Comments