14500번 - 테트로미노
안녕하세요. 문제를 맞긴 했는데, 시간초과 코드와 비교했을 때 알고리즘적으로 변경된건 없습니다.
단지 visit배열의 초기화? 부분이 달라졌는데요, 이것이 어떻게 시간초과까지 영향을 미치는지 궁금합니다.
전체 코드를 올리기에는 지저분해 보일 것 같아, main함수 및 DFS함수를 올리겠습니다!
제가 의심이 가는곳은 17번 라인에 new 키워드로 초기화해주는 부분밖에 없다고 생각하는데,
해당 부분이 시간초과를 불러일으킬 만큼 무거운 부분인가요??
+아차, 0%도 못가고 시작하자마자 시간초과가 나왔습니다 ㅋㅋ!....
new boolean[n][m]은 n*m의 메모리 할당하고 0으로 초기화하기 때문에 O(nm)이 걸릴 것 같습니다.
그냥 visit[i][j] = 0은 이보다 n*m배 빠릅니다.
감사합니다. 시간초과 나는 코드에서
new boolean 으로 초기화하는것을 clearVisit()함수를 제작하여 visit배열의 모든 값을 false로 초기화하니까
시간초과 문제는 해결됐습니다.
그러나, 바뀐 코드 : 2930ms, 위 AC코드 : 1060ms인 점을 확인했을 때 매번 visit배열을 초기화하는 것이 아니라, AC코드처럼 필요한 부분만 초기화 해야겠음을 배우고갑니다.
감사합니다!
댓글을 작성하려면 로그인해야 합니다.
jkh9615 3년 전
안녕하세요. 문제를 맞긴 했는데, 시간초과 코드와 비교했을 때 알고리즘적으로 변경된건 없습니다.
단지 visit배열의 초기화? 부분이 달라졌는데요, 이것이 어떻게 시간초과까지 영향을 미치는지 궁금합니다.
전체 코드를 올리기에는 지저분해 보일 것 같아, main함수 및 DFS함수를 올리겠습니다!
제가 의심이 가는곳은 17번 라인에 new 키워드로 초기화해주는 부분밖에 없다고 생각하는데,
해당 부분이 시간초과를 불러일으킬 만큼 무거운 부분인가요??
+아차, 0%도 못가고 시작하자마자 시간초과가 나왔습니다 ㅋㅋ!....