인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이상민님의 프로필 이미지

작성한 질문수

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

2-S

2-S 질문있습니다.

작성

·

85

·

수정됨

0

안녕하세요 큰돌님 강의 잘 보고 있습니다.

 

혼자 문제를 풀때 dfs와 dp를 섞어서 다음과 같이 풀었습니다.

 

http://boj.kr/1502bc54c9eb4d5ea406fd47713ab8e5

dp를 섞어 각 노드당 한번씩만 방문하게 하여 입력, 로직 수행, 출력 모두 합쳐도 최대 O(2n+m)이라는 생각이 드는데 시간 초과가 나옵니다. 혹시 제가 놓치고 있는 부분이 있을까요?

 

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 상민님 ㅎㅎ

반례 찾느라 시간이 걸렸습니다 ㅎㅎ

 

시간초과가 아니라 로직상 틀렸습니다.

반례는 다음과 같습니다.

12 13
2 1
3 2
4 3
5 4
1 5
6 5
7 6
8 7
9 8
5 9
10 9
11 10
12 11

 

답 : 1 2 3 4 5 6 7 8 9

상민님 코드 : 1

 

스크린샷 2025-01-15 오후 11.13.07.png.webp

참고로 위의 반례는 앞의 그림과 같은 그래프를 의미합니다.

 

감사합니다.

이상민님의 프로필 이미지
이상민
질문자

사이클을 고려하지 못해서 틀렸었네요! 감사합니다!

추가로 궁금한점이 있는데 큰돌님께서는 강의에서 시간복잡도가 보통 O(10,000,000) 까지는 괜찮다고 하셨던것이 기억납니다.

이때 만약 그래프가 1->2->3-> ... -> 10000 이렇게 되어 있는 상황에서 특정 노드마다 그래프 탐색을 수행하면 시간복잡도가 약 O(50,000,000)이 됩니다.

이는 시간 복잡도가 O(1000만)을 넘어감에도 불구하고 하나의 재귀 함수당 로직이 많지 않아서 괜찮은건가요? 아니면 일반적으로 시간복잡도가 O(1억) ≒ 1초 이고 C++은 다른 언어에 비해 실행속도가 빠르므로 시간초과가 나지 않는걸까요?

큰돌님의 프로필 이미지
큰돌
지식공유자

시간복잡도 1억은 될 때도 많습니다.

해당 부분은 알고리즘 개념 교안도 참고부탁드립니다. ㅎㅎ

스크린샷 2025-01-17 오전 5.59.20.png.webp

 

감사합니다.