Bonfire
99클럽 코테 스터디 4일차 TIL 프로그래머스 아이템 줍기 본문
프로그래머스 아이템 줍기
오늘의 문제는 DFS/BFS 문제!
생각보다 어떻게 풀어야할지, 외곽을 어떻게 알아내고 교차점을 어떻게 처리하는지가 가장 포인트가 되는 문제였던것 같다.
풀때까지 아직 해답을 잘 모르겠지만, 우선 72점정도 획득한 코드를 공유해 본다.
나의 코드
from collections import deque
def solution(rectangle, characterX, characterY, itemX, itemY):
max_x=0
max_y=0
for x1,y1,x2,y2 in rectangle:
max_x=max(max_x,x1,x2)
max_y=max(max_y,y1,y2)
graph=[[0 for _ in range(max_x+2)] for _ in range(max_y+2)]
visited=[[False for _ in range(max_x+2)] for _ in range(max_y+2)]
# 가장 밖에 것을 구하기만 하면 됨.
for x1,y1,x2,y2 in rectangle:
for i in range(x1,x2+1):
for j in range(y1,y2+1):
graph[j][i]+=1
def find_out():
queue=deque()
queue.append([0,0])
search=[[-1,0],[1,0],[0,-1],[0,1]]
while queue:
ri,ci=queue.popleft()
for dr,dc in search:
nr=ri+dr
nc=ci+dc
if 0<=nr<max_y+2 and 0<=nc<max_x+2 and not visited[nr][nc]:
visited[nr][nc]=True
if graph[nr][nc]:
graph[nr][nc]=-1
else:
queue.append([nr,nc])
find_out()
def bfs(start,end):
dist=[[0 for _ in range(max_x+2)] for _ in range(max_y+2)]
r,c=start
dist[r][c]=1
queue=deque()
queue.append(start)
search=[[-1,0],[1,0],[0,-1],[0,1]]
while queue:
ri,ci=queue.popleft()
Flag=False
for dr,dc in search:
nr=ri+dr
nc=ci+dc
if 0<=nr<max_y+2 and 0<=nc<max_x+2 and graph[nr][nc]==-1 and dist[nr][nc]==0:
dist[nr][nc]=dist[ri][ci]+1
queue.append([nr,nc])
Flag=True
if not Flag:
for dr,dc in search:
nr=ri+dr
nc=ci+dc
if 0<=nr<max_y+2 and 0<=nc<max_x+2 and graph[nr][nc] and dist[nr][nc]==0:
count=0
for dr,dc in search:
mr=nr+dr
mc=nc+dc
if 0<=mr<max_y+2 and 0<=mc<max_x+2 and graph[mr][mc]==-1:
count+=1
if count==2:
dist[nr][nc]=dist[ri][ci]+1
queue.append([nr,nc])
er,ec=end
return dist[er][ec]-1
return bfs([characterY,characterX],[itemY,itemX])
회고
시간이 늦어 내일 확인할 예정인데, 아마 어떤 아이디어가 필요하거나, 어떤 부분에서 실수를 해서 만점이 안나오는 것 같다.
생각보다 bfs/dfs는 쉬운편이라고 생각했는데, 문제 이해 + 생각보다 까다롭게 만든 조건에서 어려움을 느꼈다.
내일은 답을 찾아보고, 어떤 방식으로 풀어야했는지 정리해볼 생각이다.
'알고리즘 > 99 코테 스터디' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL 프로그래머스 네트워크 (0) | 2024.06.03 |
---|---|
99클럽 코테 스터디 5일차 TIL 프로래머스 단어 변환 (0) | 2024.06.02 |
99클럽 코테 스터디 3일차 TIL - 프로그래머스 퍼즐조각 (0) | 2024.05.30 |
99클럽 코테 스터디 2일차 TIL 프로그래머스 전력망을 둘로 나누기 (0) | 2024.05.29 |
99클럽 코테 스터디 1일차 TIL - 모음사전 (0) | 2024.05.28 |