colorxxx   5년 전

이 문제의 경우 모든 경우의 수가 300C3이여서 완전탐색을 돌렸더니 시간초과가 났습니다.

그래서 다른 코드를참조해보니 똑같이 완전탐색을 했는데도 시간초과안에 패스했더군요

저의 코드와 패스한코드의 차이점은 main함수에서 dfs(1)을 돌렸는지의 유무입니다.

dfs를 돌릴때 항상 0에서 시작한다던지의 초반 출발에 대한 제약사항이 없으면 모든 인덱스가 출발지점이 될 수 있으므로

main 함수 안에서  항상 저러한 방식으로 출발인덱스를 지정해주고 리셋하고 다시 시작하는 경우의 코드를 항상 진행해왔었는데

for (int i = 1; i < N; i++) {

 for (int j = 1; j <= H; j++) { 

 if (ladder[j][i] == 0 && ladder[j][i-1] == 0 && ladder[j][i+1]==0){ ladder[j][i] = 1; dfs(i, j, 1) ladder[j][i] = 0; } } }

이 문제에선 이렇게 하니깐 틀리네요 ㅠㅠ dfs 내부함수에서 완전탐색을 진행해야 시간복잡도 안에 들어오네요

제가 궁금한것은 이것입니다.

  1. 어차피 300C3이니깐 제가 작성한 코드처럼 작성해도 시간제한안에 들어와야 하는 아닌가요?

2. 코드를 짤때 위의 코드처럼 짜시나요 아니면 아래 코드처럼 짜시나요 맨날 아래처럼 짜오다가 이 문제 시간초과

걸려서 코드 스타일 바꿔야하나 고민중입니다.. 혹시 아래처럼 짜도 시간안에 들어오신분들 어케 짜셨는지 궁금합니다

upple1   5년 전

113번 째 줄에 항상 i가 1부터 시작하는 것 때문에 시간초과 걸린 것 같네요.

upple1   5년 전

수정해서 제출해 본 결과 틀렸습니다. 나오네요 다른 부분에서 실수하셨는지 체크해보세요

colorxxx   5년 전

아 네 수정하니깐  시간 내에 답 나오네요! 감사합니다 ㅋㅋㅋ

시간초과 났떤건 말씀해주셨던것처럼 r=1 c=1에서 중복탐색 하는거랑

 틀렸던건

for문끝나고 r=1만들어주는걸 뺴먹었었네요 ㅋㅋ 감사합니다

댓글을 작성하려면 로그인해야 합니다.