https://www.acmicpc.net/problem/1987
1987번: 알파벳
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으
www.acmicpc.net
Problem
(0,0)에서 시작해서 조건에 맞게 말을 움직여보자.
조건
같은 알파벳을 2번 지날 수 없다.
SOL)
- 간단한 경로찾기 문제이다.
- BFS/DFS 어느것이든 가능할거 같다. DFS로 풀어보았다.
- DFS는 pypyp3로 통과가 되었고, BFS는 python3로도 통과가 되었다.
import sys
input= sys.stdin.readline
R,C = map(int,input().split())
board = [list(input().rstrip()) for _ in range(R)]
alphabet=[False]*26
dist=0
dx=(1,0,-1,0)
dy=(0,1,0,-1)
def dfs(y,x,d):
global dist
dist= max(dist,d)
for k in range(4):
ny=y+dy[k]
nx=x+dx[k]
if 0<=ny<R and 0<=nx<C and not alphabet[ord(board[ny][nx])-65]:
alphabet[ord(board[ny][nx])-65] = True
dfs(ny,nx,d+1)
alphabet[ord(board[ny][nx])-65] = False
alphabet[ord(board[0][0])-65] = True
dfs(0,0,1)
print(dist)
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/9095/파이썬] 1,2,3 더하기 (0) | 2022.01.08 |
---|---|
[백준/1003/파이썬] 피보나치 함수 (0) | 2022.01.08 |
[백준/17136/파이썬] 색종이 붙이기 (0) | 2022.01.06 |
[백준/1039/파이썬] 교환 (0) | 2022.01.05 |
[백준/2580/파이썬] 스도쿠 (0) | 2022.01.05 |