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

너무어려워님의 프로필 이미지
너무어려워

작성한 질문수

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

5-L

[5-L] 브루트포스 방법 문의드립니다...!

해결된 질문

작성

·

119

·

수정됨

1

https://www.acmicpc.net/source/73585978

 

시간초과가 발생하는데, 어느 부분을 수정해서 복잡도를 줄여야할지 잘 모르겠어요..!

dfs를 실행하는 반복문을 절반으로 줄이는 방식으로 해야할까요...?

 

답변 1

0

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

안녕하세요 ㅎㅎ

  for(int i = 0; i < n; i++){
    if(check[i])
      continue;
    check[i] = true;
    dfs(cnt+1);
    check[i] = false;
  }

이부분을 줄이셔야 할 것같습니다.

if문으로 continue를 하셨다 하더라도

기본적으로 n번 호출하게 되는 코드라.

n^n/2 정도의 시간복잡도를 가지게 되서 -> 시간초과가 뜨는 것 같습니다.

 

    check[i] = true;
    dfs(cnt+1);
    check[i] = false;
    dfs(cnt+1);

for문을 사용하지 말고 이런 형태로 바꿔보시는 것은 어떨까요?



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


너무어려워님의 프로필 이미지
너무어려워

작성한 질문수

질문하기