inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-S

2-S DFS 시간초과

해결된 질문

318

찬비

작성한 질문수 18

0

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

vector<int> adjList[10002];
bool visited[10002];

int n, m;
int _max = INT_MIN;
map<int, int> virus;

void fastIO() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

void DFS(int v, int sum, int com) {
    _max = max(_max, sum);
    virus[com] = max(virus[com], sum);
    for (auto adjV : adjList[v]) {
        visited[adjV] = 1;
        DFS(adjV, sum + 1, com);
        visited[adjV] = 0;
    }
}

int main() {
    fastIO();
    //freopen("input.txt", "rt", stdin);

    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        adjList[b].push_back(a);
    }

    for (int i = 1; i <= 10000; i++) {
        if (adjList[i].empty()) continue;
        visited[i] = 1;
        DFS(i, 1, i);
        visited[i] = 0;
    }

    for (auto e : virus) {
        if (e.second == _max) {
            cout << e.first << ' ';
        }
    }

    return EXIT_SUCCESS;
}

인접리스트 DFS로 풀었는데 시간 초과가 납니다.

뭐가 문제일까요..?

 

C++ 코테 준비 같이 해요!

답변 1

1

큰돌

안녕하세요. 찬비님

1. DFS가 아니라 완전탐색으로 푸셨으니까 시간초과가 나는 겁니다.

        visited[adjV] = 1;
        DFS(adjV, sum + 1, com);
        visited[adjV] = 0;

이부분을 보죠. DFS는 뭐죠? 

"방문한 정점은 다시 방문하지 않는, 깊이 우선탐색"이죠?

근데 저렇게 해버리면 adjV 노드를 탐색했다가 방문을 한처리를 지우고 다시 탐색하게 될 겁니다. 

이건 나중에 배우는 완전탐색꼴이에요.

 

2. 이 문제의 N을 기반으로 DFS로 시간복잡도가 얼마일까요? 

시간복잡도를 계산해보시면 1억입니다. 이부분에 관한건 영상에 있습니다. 

또 질문사항있으시면 언제든 말씀 부탁드립니다. 

감사합니다. 

강사 큰돌 올림. 

0

찬비

아.. 저렇게 짜면 완탐이었군요. 개념 강의 다시들어야겠습니다. 감사합니다.

1-E질문입니다!

0

530

2

3-L 틀린 부분 피드백 부탁드립니다.

0

833

2

1-A문제 순열재귀함수 질문입니다.

0

396

1

1-A 일곱난쟁이문제입니다

0

466

1

문제 풀 때 방향성에 대해

0

809

1

맥에서 vs code로 실행 관련 질문입니다

0

528

1

17071번 메모리 초과

0

389

1

1-C질문입니다!

0

427

2

2-B BFS 시간초과질문

0

637

2

1-O 13번 라인

0

445

1

6-J 놀이공원 문제 질문

0

387

1

구현관련 질문

0

488

1

강의 교안

0

321

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

549

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

538

1

1-K

0

481

2

3-G번 질문있습니다.

1

479

3

3-C 실행 시간 질문드립니다.

0

500

1

4-A 문제 풀이 질문있습니다.

0

599

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

441

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

345

1

3-O go 함수 질문 드립니다.

1

450

2

4-A 출력 질문

0

306

1

1주차 1-O 질문드립니다

0

262

1