Algorithm/acmicpc.net
가끔은 뇌에 과부화가
winney916
2022. 1. 24. 22:33
728x90
#16929번 Two Dots https://www.acmicpc.net/problem/16929
16929번: Two Dots
첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문
www.acmicpc.net
무난하게 풀 수 있을거라 생각했다.
N, M = map(int, input().split())
mat = []
attrs = set()
for i in range(N):
tmp = []
for j in input():
attrs.add(j)
tmp.append(j)
mat.append(tmp)
def print_mat(mat):
for i in mat:
print(i)
def solve(target):
# find first target position
start = []
for i in range(N):
for j in range(M):
if mat[i][j] == target:
start = [i, j]
break
if len(start) > 0:
break
# dfs visit record
visited = [[False]*M for _ in range(N)]
# dfs direction
dr = [1, 0, -1, 0]
dc = [0, 1, 0, -1]
def dfs(prev, depth, visited):
if depth >= 4 and prev == start:
print(target, True)
return True
for i in range(4):
nr, nc = prev[0]+dr[i], prev[1]+dc[i]
if 0 <= nr < N and 0 <= nc < M and not visited[nr][nc]:
if mat[nr][nc] == target:
visited[nr][nc] = True
dfs([nr, nc], depth+1, visited)
visited[nr][nc] = False
dfs(start, 1, visited)
print_mat(visited)
solve("B")
근데 잘 안되길래 이게 뭔가 했더니
solve함수 내에서 제일 처음 나오는 target값만 가지고 진행한다.
모든 target값에서 탐색이 필요한데
이게 뭐하는...
왜 몰랐지??....
N, M = map(int, input().split())
mat = [[x for x in input()] for _ in range(N)]
# dfs visit record
visited = [[False]*M for _ in range(N)]
# dfs direction
dr = [1, 0, -1, 0]
dc = [0, 1, 0, -1]
def dfs(start, prev, depth, visited):
# print(depth)
# print_mat(visited)
if depth >= 4 and prev == start:
print("Yes")
exit()
for i in range(4):
nr, nc = prev[0]+dr[i], prev[1]+dc[i]
if 0 <= nr < N and 0 <= nc < M and not visited[nr][nc]:
if mat[nr][nc] == mat[start[0]][start[1]]:
visited[nr][nc] = True
dfs(start, [nr, nc], depth+1, visited)
visited[nr][nc] = False
for i in range(N):
for j in range(M):
dfs([i, j], [i, j], 0, visited)
print("No")
모든 위치를 탐색하게끔 바꿨다.
더 효율적으로 만들 수 있을 것 같다.
이제 골드 3~5정도는 무난하게 풀어가는 느낌이 든다! (플레로 가는 길인가..?)
근데 가끔은 머리가 터질 듯한 느낌이 들기도 한다.
그래도 오늘 62일차 연속 스트릭을 찍었기에
만족스럽게 잠에 들 수 있을 것 같다.
https://solved.ac/profile/dlgustmd3590
solved.ac - dlgustmd3590
최대 64일 연속 문제 해결, 현재 64일 날짜는 한국 시각 기준으로 매일 오전 6시에 변경됩니다. 강제 갱신의 경우 반영되지 않습니다. 경험치 1,412,759 ▪ BRONZE8642.2%96,1566.8% ▪ SILVER9948.5%731,64851.8% ▪
solved.ac
플래티넘 되고싶다!!
아니 앞으로 만날 코테 다 통과하고싶다!!
뿌셔버려!!