📎 문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/87694
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🤔 문제 이해 및 알고리즘 유형
알고리즘 유형
- BFS
💡 문제 해결 방법
1) 맵의 크기를 2배로 늘리고 사각형의 좌표 위치도 2배로 늘린다.
2) 맵에서 0은 내부로 1은 테두리로 설정한다.
3) BFS로 최단 거리를 탐색한다.
4) 이때 최종 답인 짧은 거리는 무조건 나누기 2를 해주어야 한다.
💻 코드
from collections import deque
def solution(rectangle, cx, cy, ix, iy):
answer = 0
graph = [[-1 for _ in range(102)] for _ in range(102)]
visited = [[1 for _ in range(102)] for _ in range(102)]
dx=[0,1,0,-1]
dy=[1,0,-1,0]
#map에 라인채우기
for r in rectangle:
x1,y1,x2,y2 = map(lambda x:x*2,r)
for i in range(x1,x2+1):
for j in range(y1,y2+1):
if x1<i<x2 and y1<j<y2: #내부
graph[i][j]=0
elif graph[i][j]!=0:
graph[i][j]=1 #테두리
#bfs로 최단거리 탐색하기
cx,cy,ix,iy=cx*2,cy*2,ix*2,iy*2
queue=deque()
queue.append((cx,cy))
while queue:
x,y=queue.popleft()
if x==ix and y==iy:
answer = visited[x][y]//2
break
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if visited[nx][ny]==1 and graph[nx][ny]==1:
visited[nx][ny]+=visited[x][y]
queue.append((nx,ny))
return answer
✔ 생각해봐야 할 점
- 맵을 2배로 늘려야 함
- 내부와 테두리를 어떻게 설정할 것인지 확인
- BFS로 최단거리 탐색하기
참고 사이트
'알고리즘 > Python 코테' 카테고리의 다른 글
99클럽 코테 스터디 4일차 TIL(BFS) (1) | 2024.06.03 |
---|---|
99클럽 코테 스터디 3일차 TIL(BFS) (0) | 2024.06.02 |
99클럽 코테 스터디 1일차 TIL - 완전 탐색 (0) | 2024.05.29 |
[Softeer] 순서대로 방문하기 (0) | 2024.03.25 |
[softeer] 자동차 테스트 (0) | 2024.03.25 |