visited = [[0]*n for _ in range(n)] 두고 풀 경우
1) 한 개의 섬만 색칠하고 for문을 이용해 어떤 섬에서 나머지 섬들중 거리가 가장 빠른 섬을 구하는 bfs를 만들어서 최솟값 구하기
2) 모든 섬을 각각 다른 번호로 색칠하고, 한 번 bfs를 돌릴 때마다 간척사업처럼 1씩 늘리다가 서로 만날 경우 출력하고 종료하기
둘이 메모리 사용량은 비슷하지만 1이 2보다 약 두 배 정도 빠릅니다.
2146번 - 다리 만들기
visited = [[0]*n for _ in range(n)] 두고 풀 경우
1) 한 개의 섬만 색칠하고 for문을 이용해 어떤 섬에서 나머지 섬들중 거리가 가장 빠른 섬을 구하는 bfs를 만들어서 최솟값 구하기
2) 모든 섬을 각각 다른 번호로 색칠하고, 한 번 bfs를 돌릴 때마다 간척사업처럼 1씩 늘리다가 서로 만날 경우 출력하고 종료하기
둘이 메모리 사용량은 비슷하지만 1이 2보다 약 두 배 정도 빠릅니다.
네 visited를 줄이고 bfs를 1),2)에 맞게 수정하시면 됩니다.
그리고 파이썬은 재귀가 느린 것으로 알고 있는데 100 x 100이 그렇게 큰 영향을 줄 것 같지는 않을 것 같아요.
아 dfs라고 되어있어서 재귀 함수로 하신 줄 알았는데 그냥 deque로 하셨네요. 저 말은 무시해도 됩니다.
만약 맵이
1 0 0
0 0 0
0 0 2
이렇게 있다면 다음 턴엔
1 1 0
1 0 2
0 2 2
이렇게 될 것이고
다음턴엔
1 1 1
1 1 2
1 2 2
가 되어 최솟값 3이 나옵니다.
2차원 배열로 충분히 구현할 수 있습니다.
제가 https://www.acmicpc.net/source/12767022 여기에 주석 달아 놨으니 혹시 필요하시면 보는 것도 나쁘지 않을 것 같습니다.
좋은 주말 보내세요
대부분 저런 요구사항은 다익스트라, 플로이드로 만들어져서 비슷한 문제를 본 적이 없네요.
그나마 비슷하다고 말할만한 것이 알고스팟 같아요.
댓글을 작성하려면 로그인해야 합니다.
mike1201 5년 전
pass는 했는데 시간을 줄이는 과정에서 3중 방문 배열
" visited = [[[0]*len_sum for _ in range(N) ] for _ in range(N)] "
을 적절히 잘 줄이면 더 최적화 할 수 있을 것 같은데 그러지 못해 질문드립니다...
애초에 컴공과도 아니고, 이런 거에는 너무 문외한이라서 도움 부탁드려요