일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 17451번
- 백준 3085번
- 다이나믹프로그래밍
- 자바
- SWEA 15612번
- 백준 18310번
- 그래프
- 백준 1331번
- javascript
- 명품자바
- 다이나믹 프로그래밍
- 그리디
- 깃헙
- java_programming
- MySQL
- 모각코
- AWS
- SQL
- 백준 15787번
- 백준 2512번
- 백준 1987
- 백준 1253번
- 백준
- react
- HUFS 모각코 캠프
- 알고리즘
- ubuntu
- 백준 16918번
- 머신러닝과 딥러닝
- Python
Archives
- Today
- Total
차곡차곡
[모각코] 210811 Today I Learned 본문
https://amor-fati.tistory.com/41
지난 주에 visited 리스트가 재귀함수를 빠져나와도 변경된 값이 계속 유지되어서 문제가 된다고 했었는데, 그냥 copy가 아닌 copy.deepcopy() 함수만 쓰면 됐다. 예전에 쓴 적 있는데 까먹고 있었다. 바보 ㅎㅋ
그런데 코드를 고치고 생각해보니 visited 리스트 자체가 필요 없었다. 이번 문제는 이전에 지나간 곳도 아니고, 지나온 알파벳도 아니어야 하기 때문에 지나온 알파벳들을 저장하는 before 리스트에서 다음 지나가려는 알파벳이 있는지만 확인하면 됐다. visited로 굳이 비교하지 않아도 된다. 다음 방문하려는 알파벳이 before 안에 있다는 건 이미 방문을 했다는 걸 의미하니까! (혹은 동일 알파벳을 지나온 것. 어쨌든 그 곳으로 이동하지 못 함)
그렇게 visited 리스트도 빼고 코드도 다시 고쳤는데 시간초과 실화니 ,,
dfs 자체를 뜯어 고쳐야 되는 것 같다 ,, 문제 검색해보니까 다들 나랑 완전 다른 방법으로 했다. 처음 보는 거임 환장
dfs 구현하는 다른 코드 공부한 다음에 풀어야 할 것 같다 .. ^^
** 타임아웃 코드
import sys
import copy
global max_count
max_count = 0
# DFS
class Node:
def __init__(self, bord):
self.value = bord[0][0]
self.row = 0
self.col = 0
def Move(bord, p, R, C, before):
before.append(p.value)
next = Node(bord)
if p.col < C-1: # 오른쪽 이동
if bord[p.row][p.col+1] not in before:
next.value = bord[p.row][p.col+1]
next.row = p.row
next.col = p.col + 1
n_before = copy.deepcopy(before)
Move(bord, next, R, C, n_before)
if p.col > 0: # 왼쪽 이동
if bord[p.row][p.col-1] not in before:
next.value = bord[p.row][p.col-1]
next.row = p.row
next.col = p.col - 1
n_before = copy.deepcopy(before)
Move(bord, next, R, C, n_before)
if p.row > 0: # 위쪽 이동
if bord[p.row-1][p.col] not in before:
next.value = bord[p.row-1][p.col]
next.row = p.row - 1
next.col = p.col
n_before = copy.deepcopy(before)
Move(bord, next, R, C, n_before)
if p.row < R-1: # 아래쪽 이동
if bord[p.row+1][p.col] not in before:
next.value = bord[p.row+1][p.col]
next.row = p.row + 1
next.col = p.col
n_before = copy.deepcopy(before)
Move(bord, next, R, C, n_before)
else:
global max_count
if max_count < len(before):
max_count = len(before)
# 입력
R, C = map(int, sys.stdin.readline().split())
bord = []
for i in range(R):
bord.append(sys.stdin.readline())
before = [] # 지나온 알파벳 저장
# 출력
p = Node(bord)
Move(bord, p, R, C, before)
print(max_count)
'HUFS > 2021 HUFS 모각코 캠프' 카테고리의 다른 글
[모각코] 210818 Today I Learned (0) | 2021.08.19 |
---|---|
[모각코] 210814 Today I Learned (0) | 2021.08.15 |
[모각코] 210807 Today I Learned (0) | 2021.08.08 |
[모각코] 210804 Today I Learned (0) | 2021.08.06 |
[모각코] 210731 Today I Learned (0) | 2021.07.31 |
Comments