티스토리 뷰
문제
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다.
말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다.
좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다.
입력
첫째 줄에 R과 C가 빈칸을 사이에 두고 주어진다. (1 ≤ R,C ≤ 20) 둘째 줄부터 R개의 줄에 걸쳐서 보드에 적혀 있는 C개의 대문자 알파벳들이 빈칸 없이 주어진다.
출력
첫째 줄에 말이 지날 수 있는 최대의 칸 수를 출력한다.
예제
입력 | 출력 |
2 4 CAAB ADCB |
3 |
3 6 HFDFFB AJHGDH DGAGEH |
6 |
5 5 IEFCJ FHFKC FFALF HFGCF HMCHH |
10 |
풀이
R, C = map(int, input().split())
board = [[i for i in input()] for _ in range(R)]
direction = [(-1, 0), (1, 0), (0, -1), (0, 1)]
ans = 1 # 시작하는 첫번째 칸을 포함하기 위해 1부터 시작
def dfs(route, x, y):
global ans
for dir in direction:
nx, ny = x + dir[0], y + dir[1]
if (nx < 0 or nx >= R or ny < 0 or ny >= C):
continue
if (board[nx][ny] not in route):
dfs(route + board[nx][ny], nx, ny)
if (len(route) > ans):
ans = len(route)
dfs(board[0][0], 0, 0)
print(ans)
파이썬으로 제출하니 시간초과가 떠서 pypy3으로 제출
'개발자를 위한 한 걸음 > 코딩 문제' 카테고리의 다른 글
숫자 야구 - 백준 #2503, 구현/브루트포스 알고리즘 (0) | 2023.03.01 |
---|---|
할인 행사 - 프로그래머스 lv.2 (0) | 2023.03.01 |
성격 유형 검사하기 - 프로그래머스 lv.1 (0) | 2023.02.23 |
에너지 드링크 - 백준 #20115, 그리디 알고리즘 (2) | 2023.02.19 |
신기한 소수 - 백준 #2023, 수학/정수론/백트래킹/소수 판정 (0) | 2023.02.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- leetcode
- 코딩 테스트
- 골드5
- 프로그래머스
- 카카오
- 정렬
- 그래프 탐색
- 문자열
- 다이나믹 프로그래밍
- 구현
- 그리디 알고리즘
- 너비 우선 탐색
- 백트래킹
- 수학
- 코드트리
- 실버3
- 깊이 우선 탐색
- Simulation
- 코딩테스트
- 백준
- 리트코드
- lv.2
- 시뮬레이션
- lv.3
- 릿코드
- Python
- 실버2
- 카카오 코딩테스트
- 그래프 이론
- 브루트포스 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함