내 맴

[ 백준 ] 1987번 : 알파벳 (BFS / 파이썬) 본문

Algorithm/Baekjoon 문제풀이

[ 백준 ] 1987번 : 알파벳 (BFS / 파이썬)

뺙사우르수 2022. 12. 27. 13:45
728x90

문제 )

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

 

1987번: 알파벳

세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으

www.acmicpc.net

 

[ 풀이 IDEA ]

1. BFS/DFS로 풀어야하는 문제!

2. 그러나, 단순히 풀면 시간에러가 난다.

💡 SET 이용해서 문제 해결!

▶ BFS의 경우, queue대신에 set을 사용 & set에 좌표/visited(지나온 알파벳)을 저장한다

 

- python code 

dx = [0,0,-1,1]
dy = [-1,1,0,0]

def solution(board):
    global max_cnt
    q = set([(0, 0, board[0][0])])
    while q:
        x, y, visited = q.pop()
        max_cnt = max(max_cnt, len(visited))
        # 상하좌우 탐색
        for k in range(4):
            nx, ny = x+dx[k], y+dy[k] 
            if (0<=nx<r) and (0<=ny<c) and (board[nx][ny] not in visited):
                q.add((nx, ny, board[nx][ny]+visited))



r, c = map(int, input().split())
board = [list(input()) for _ in range(r)]
max_cnt = 0

solution(board)
print(max_cnt)

 

728x90