1. Python 풀이.
이건 BFS라고 생각했다. 왜? 상하좌우로 한칸씩 이동하면서 간 새곳이 이전에 간곳과 동일한지 체크하면 되기 때문이다.
import sys
row , col = map(int, sys.stdin.readline().split())
arr = []
arr = [list(map(str, sys.stdin.readline().strip())) for _ in range(row)]
dx = [-1,1,0,0] #왼오
dy = [0,0,-1,1] #아래 위
cnt = 1
def BFS(): # 한칸씩 최대 몇칸을 가는지를 구해야하기에
global cnt
queue = set([(0,0,arr[0][0])])
while queue:
a,b,c = queue.pop()
cnt = max(cnt, len(c))
for i in range(4):
nx = a + dx[i]
ny = b + dy[i]
if 0<=nx < row and 0<=ny< col and arr[nx][ny] not in c:
queue.add((nx,ny,arr[nx][ny] + c))
BFS()
print(cnt)
진짜 오랜만에(6개월만) 파이썬을 해서 하나도 모르겠다.. 인풋받는것부터..
처음에 cnt=1로 잡아두고 set으로 중복되는곳은 제거하였다.
큐에서 하나씩 빼주면서 그 왼오위아래를 투어하면서 만약 그 알파벳이 없으면 큐에 넣어주고
큐가 다빠질때까지 반복하면서 c는 그동안의 지난칸들의 알파벳을 저장하므로 둘중 더큰것을 비교를 통해 전역변수 cnt를 이용하여 구해줄수 있다!!
2. swift로 해볼까?
'알고리즘' 카테고리의 다른 글
1043-python (1) | 2023.05.11 |
---|---|
[프로그래머스]-이모티콘할인행사(swift) (1) | 2023.05.04 |
알고리즘 2023kakaoblind-개인정보 수집 유효기간(python) (0) | 2023.04.30 |
프로그래머스-귤고르기(Python) (0) | 2023.04.29 |
1647 - swift (1) | 2023.04.24 |