ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2589. [Python]보물섬
    Python_알고리즘/Gold V 2024. 8. 6. 18:22

    1. 문제

     

    https://www.acmicpc.net/problem/2589

     

     

    2. 접근 방법

     

    • 시간 제한: 1초
    • 메모리 제한: 512MB
    • 너비 우선 탐색

     

    3. 파이썬 코드

     

    from collections import deque
    import sys
    
    input = sys.stdin.readline
    # 방향 탐색
    direction = [(0,-1), (-1,0), (0,1), (1,0)]
    # 너비 우선 탐색
    def BFS(x,y):
        global max_value
        visited = [ [0] * M for _ in range(N) ]
        visited[x][y] = 1
        queue = deque([(x,y)])
        while queue:
            check = queue.popleft()
            for k in range(4):
                ny = check[0] + direction[k][0]
                nx = check[1] + direction[k][1]
                # 범위 내 존재
                if 0 <= ny < N and 0 <= nx < M:
                    # 땅이고 방문하지 않았을 경우
                    if matrix[ny][nx] == "L" and visited[ny][nx] == 0:
                        # 방문처리 후 최대값 비교
                        visited[ny][nx] = visited[check[0]][check[1]] + 1
                        if visited[ny][nx] > max_value:
                            max_value = visited[ny][nx]
                        queue.append((ny,nx))
    
    N, M = map(int,input().split())
    
    matrix = [ list(map(str,input())) for _ in range(N) ]
    
    
    max_value = 0
    
    for i in range(N):
        for j in range(M):
            if matrix[i][j] == "L":
                BFS(i,j)
    
    print(max_value-1)

     

    4. 문제를 풀고난 후 생각

     

    • 단순한 BFS 를 한번 돌려서 해결할 수 있을거라 생각했고 실제로 한번만 돌렸을 때 값이 나오는 것을 보고 쉬운 문제라고 판단했다.
    • 모든 경우의 수를 다 고려해서 "L"(육지)에서 BFS를 모두 돌려 거기서 거리가 제일 먼 값이 나와야 문제에서 요구하는 정답이 된다는 것을 알게 되었고, 모든 "L"에서 BFS를 돌렸다.
    • Python3 로는 55% 에서 시간초과가 발생하지만 Pypy3 로는 시간초과 없이 통과됐다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 너비 우선 탐색

    'Python_알고리즘 > Gold V' 카테고리의 다른 글

    2866. [Python]문자열 잘라내기  (0) 2024.08.13
    14891. [Python]톱니바퀴  (0) 2024.08.07
    2470. [Python]두 용액  (0) 2024.07.29
    2212. [Python]센서  (0) 2024.07.12
    2660. [Python]회장뽑기  (1) 2024.07.03

    댓글

Designed by Tistory.