안녕하세요, 제가 해당 코드를 요리조리 조금씩 수정해서 제출해봤는데,
결론만 말하면
map<int, int> v ; 가 매우 느립니다.
이부분만 int v[256]; 으로 바꿔주셔도 아주 빨라져요.
map<int, int> 이 느린 이유는 map은 key 값을 이용해 value에 접근하는게 배열의 인덱스와 달리 O(log n) 이 걸리기 때문입니다. (배열의 인덱스를 이용한 접근은 O(1))
map<int, int> v 를 굳이 살리면서 통과하려면
dfs 함수내에서 코드를 조금 손 볼 필요가 있습니다. 예를들어서
if (v[board[r][c]] == 0) v[board[r][c]] = 1; 해당 부분은 맨 처음에만 true이고 그외엔 전부 false 이기 때문에 쓸데 없이 매번 조건비교를 하면서 시간낭비를 합니다.
이부분을 아예 dfs 밖으로 빼도 아슬아슬하게 통과하네요.
y_ht 3년 전 1
20 * 20 크기의 입력도 제대로 처리하는 것을 확인했습니다.
그런데 시간초과가 나옵니다.. 왜 그런지 이유를 모르겠어요
소스코드에 구현 내용에 관한 주석을 첨부했습니다.
하단에 TC로 적어둔 내용은 제대로 정답이 나오는지 확인한 테스트케이스 모음입니다.