반응형
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
- SSAFY
- 자료구조
- Backjoon
- 싸피
- 자바스크립트
- 스택
- DP
- DFS
- SW역량테스트
- 카카오
- Blind
- SWEA
- 힙큐
- javascript
- Python
- 다이나믹프로그래밍
- 삼성
- 프로그래머스
- algorithm
- BFS
- 완전탐색
- 그래프
- 코딩테스트
- boj
- 백준
- 파이썬
- 알고리즘
- sort
- kakao
- 코테
Archives
- Today
- Total
맞왜틀
[python] 백준 - 1987. 알파벳 본문
반응형
출처 : BACKJOON ONLINE JUDGE
문제 : https://www.acmicpc.net/problem/1987
1987번: 알파벳
문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한
www.acmicpc.net
문제 해결
1. DFS/BFS 를 활용하는 방법과 백트래킹을 활용하는 방법 중 하나를 사용하면 된다.
( 여기서는 백트래킹을 사용했다. )
2. 함수 인자로 ( x좌표, y좌표, 지나가면서 늘어가는 단어) 이 3개를 받는다.
3. 상하좌우 방향을 탐색하면서, 이미 가지고 있는 단어에 포함되어 있는 문자인지 확인해주고
4. 한칸씩 전전할 수 있는 모든경우의 수를 포문으로 돌려가면서 확인해준다.
- > python 으로 제출 시 시간 초과가 나와서, pypy로 제출해서 통과했다.
+ BFS를 사용하는게 시간이 더 절약된다.
소스코드
def backt(x, y, word):
global result
check = 0
for k in range(4): # 상 하 좌 우 4방향 탐색
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < n and 0 <= ny < m and words[nx][ny] not in word: # 인덱스 초과 방지 & 문자 중복 방지
backt(nx, ny, word+words[nx][ny])
else:
check += 1
# 더 이상 이동할 수 없으면 문자의 길이를 확인해 준다.
if check == 4:
result = max(result, len(word))
return
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
n, m = map(int, input().split()) # R, C | 세로, 가로
words = [list(input()) for _ in range(n)]
result = 0
backt(0, 0, words[0][0])
print(result)
반응형
'Algorithm Problem > Python' 카테고리의 다른 글
| [python] 백준 - 14499. 주사위 굴리기(삼성 SW 역량 테스트 기출 문제) (0) | 2020.05.19 |
|---|---|
| [python] 백준 - 17144. 미세먼지 안녕!(삼성 SW 역량 테스트 기출 문제) (2) | 2020.05.18 |
| [python] 백준 - 14890. 경사로(삼성 SW 역량 테스트 기출 문제) (0) | 2020.05.14 |
| [python] 백준 - 14891. 톱니바퀴 (삼성 SW 역량 테스트 기출 문제) (2) | 2020.05.12 |
| [python] 백준 - 14503. 로봇 청소기 (삼성 SW 역량 테스트 기출 문제) (2) | 2020.05.12 |