Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 징검다리건너기
- 구현
- javascript
- DFS
- 그래프탐색
- [1차]캐시
- 최단경로
- 섬연결하기
- 두큐합같게만들기
- 사이클게임
- 알고리즘
- BFS
- 프로그래머스
- 프림알고리즘
- 트리의지름
- RGB거리2
- 거리두기확인하기
- 17404
- 파이썬
- 파괴되지않은건물
- 위상정렬
- 자물쇠와열쇠
- 도넛과막대그래프
- 백준
- DP
- 다익스트라
- 벽부수고이동하기
- 큐
- 이모티콘할인행사
- 최소스패닝트리
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘] 백준 1987 - 알파벳 본문
문제
https://www.acmicpc.net/problem/1987
1987번: 알파벳
세로 $R$칸, 가로 $C$칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 ($1$행 $1$열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의
www.acmicpc.net
풀이
얘도 예전에 이미 풀었던 문제인데.. 딱 봤을 때 간단한 dfs같은데 왜이리 정답율이 낮은건가 싶었다.
나도 dfs로 풀었고 방문한 알파벳을 set형태의 visited에 add해주는 식으로 관리했다. 파이썬3으로 하면 시간 초과가 나고 pypy로 해야 엄청 느릿느릿 채점돼서 통과한다.
코드
import sys
input=sys.stdin.readline
r,c = map(int,input().split())
table=[]
dx=[1,-1,0,0]
dy=[0,0,-1,1]
answer = 0
visited=set()
def dfs(x,y,cnt):
global answer
answer = max(answer,cnt)
visited.add(table[x][y])
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<r and 0<=ny<c and table[nx][ny] not in visited:
dfs(nx,ny,cnt+1)
visited.remove(table[x][y])
for _ in range(r):
tmp = input()
table.append(list(tmp))
dfs(0,0,1)
print(answer)
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - k진수에서 소수 개수 구하기 (1) | 2024.01.11 |
---|---|
[알고리즘] 프로그래머스 - 문자열 압축 (0) | 2024.01.11 |
[알고리즘] 프로그래머스 - 괄호 변환 (0) | 2024.01.09 |
[알고리즘] 프로그래머스 - 타겟넘버 (0) | 2024.01.09 |
[알고리즘] 백준 1918 - 후위 표기식 (1) | 2024.01.08 |