• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

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

24.02.17 23:52 작성 24.02.17 23:54 수정 조회수 59

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점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.