sohnryang   5년 전

간단하게 dfs로 코딩했는데 시간초과 뜹니다. 한번 봐주시면 감사하겠습니다.

luniro   5년 전

각 1에서부터 dfs로 구현하면 시간초과가 뜹니다

예시:
6 6
101010
000000
101010
000000
101010
000000

이와 같은 형태로 들어오게 되면 O(M^2 N^2)이 되어 1000 by 1000이 되면 시간초과가 발생합니다

sohnryang   5년 전

음.. 그럼 BFS는 괜찮을까요?

luniro   5년 전

지금 방식으로는 bfs dfs에 관계없이 시간초과가 발생합니다

sohnryang   5년 전

약간만 힌트라도 주시면 안될까요..?

luniro   5년 전

저도 같은 방법으로 접근했다가 시간초과를 겪고 수정했습니다 제가 사용한 방법은 1을 따로 0으로 변환하지 않고 각 0 묶음의 갯수를 dfs로 헤아렸습니다 그 후 각 1마다 상하좌우에 0이 있는 경우 각 묶음의 합을 모두 더한 후 +1하는 식으로 계산했습니다

그러니깐 지금의 방식은 0이 넓게 연결되어있으면 dfs나 bfs를 통해 중복해서 카운트를 하게 되는데, 0을 미리 한 번만 세서 각 1을 중심으로 더해서 중복으로 계산하는 것을 줄였습니다

다만 이 방법에서는 처음의 예시와 같이 하나의 1 주변에 한 묶음의 0이 상하좌우에 중복 될 경우 한 번만 더해지도록 구현해야합니다

sohnryang   5년 전

네 한번 그렇게 풀어보겠습니다. 답변 감사합니다 ㅎㅎㅎ

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