-
백준 1987 - 알파벳 (Python)BOJ PS/Python 2023. 1. 13. 19:31
https://acmicpc.net/problem/1987
1987번: 알파벳
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으
www.acmicpc.net
깨달음이 있었던 문제. bfs 자리에 set을 넣을 수 있다는 생각 자체를 해보지 않았는데, 알게 되었다.
즉 특정 좌표에서 특정 visited 상태로 다시 진입하지 않을 수 있도록 q를 set으로 두는 것이다.
알파벳의 종류를 ord()를 이용하여 int 로 전달해보기도 하고, 비트 연산으로 전달해보기도 하였으나 전부 시간초과였다.
import sys input = sys.stdin.readline r, c = map(int, input().split()) answer=1 graph = [] for _ in range(r): graph.append(list(input())) dy = [0, 0, 1, -1] dx = [1, -1, 0, 0] def bfs(): global answer q = set([(0, 0, graph[0][0])]) while q: cur_y, cur_x, visited = q.pop() for i in range(4): ny = cur_y + dy[i] nx = cur_x + dx[i] if 0 <= ny < r and 0 <= nx < c: al = graph[ny][nx] if al not in visited: q.add((ny, nx,visited+al)) answer=max(answer,len(visited)+1) return answer print(bfs())'BOJ PS > Python' 카테고리의 다른 글
백준 25330 - SHOW ME THE DUNGEON (Python) (1) 2023.01.17 백준 20947 - 습격받은 도시 (Python) (0) 2023.01.13 백준 1725 - 히스토그램 (Python) (0) 2023.01.13 백준 6549 - 히스토그램에서 가장 큰 직사각형 (Python) (0) 2023.01.13 백준 1687 - 행렬 찾기 (Python) (0) 2023.01.13