티스토리 뷰

반응형

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

 

1987번: 알파벳

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

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 깊이 우선 탐색
  • 백트래킹

 


 

⊙ 문제 접근 과정

 

bfs를 사용해 문제를 풀었다.

 

조건을 통해 알파벳이 탐색하지 않았고 범위 안에 있다면 탐색을 추가한다.

계속해서 반복하여 answer의 최댓값을 갱신해준다.

 

처음에 dfs로 문제를 풀어봤는데 pypy로 해도 시간 초과가 나서 bfs로 풀었다.

 

 


 

⊙ 문제 풀이

 

import sys

input = sys.stdin.readline
R, C = map(int, input().split())
l = [list(input().strip()) for _ in range(R)]

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

def bfs(x,y):
    global answer
    q = set([(x,y,l[x][y])])

    while q:
        x, y, ans = q.pop()

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            if(0<= nx < R and 0<=ny<C and (l[nx][ny] not in ans)):
                q.add((nx,ny,ans+l[nx][ny]))
                answer = max(answer, len(ans)+1)

answer = 1
bfs(0,0)
print(answer)

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함