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 |
Tags
- react
- java
- SW
- react-redux
- Python
- react-router
- 코딩테스트합격자되기
- 매일메일
- maeil-mail
- 알고리즘
- sw expert academy
- 이코테
- json-server
- 항해99
- C++
- programmers
- Get
- redux-saga
- 자바
- useDispatch
- redux
- Algorithm
- axios
- redux-toolkit
- 테코테코
- 프로그래머스
- 항해플러스
- JavaScript
- 리액트
- createSlice
Archives
- Today
- Total
Binary Journey
[프로그래머스] 거리두기 확인하기 본문
반응형
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
어려워서 구글링하여 참고하였고 제출은 안 함..!
from collections import deque
LENGTH = 5
def bfs(p):
start = []
# 시작점이 되는 P 좌표 구하기
for i in range(LENGTH):
for j in range(LENGTH):
# 응시자가 앉아있는 자리 P가 시작점
if p[i][j] == 'P':
start.append([i, j])
for s in start:
queue = deque([s]) # 큐에 초기값
visited = [[0]*LENGTH for i in range(LENGTH)] # 방문 처리 리스트
distance = [[0]*LENGTH for i in range(LENGTH)] # 경로 길이 리스트
visited[s[0]][s[1]] = 1
while queue:
y, x = queue.popleft()
dx = [-1, 1, 0, 0] # 좌우
dy = [0, 0, -1, 1] # 상하
for i in range(4):
# 다음 진행 위치 구하기
nx = x + dx[i]
ny = y + dy[i]
# 대기실(5) 이내 방문하지 않은 자리
if 0<=nx<LENGTH and 0<=ny<LENGTH and visited[ny][nx] == 0:
# 'O'이면 빈 자리로 다음'P'가 나올 때까지의 거리에 해당하므로 거리를 더해 줌
if p[ny][nx] == 'O':
queue.append([ny, nx])
visited[ny][nx] = 1
distance[ny][nx] = distance[y][x] + 1
# 'P'일 때 맨해튼 거리가 2 이내이면 거리두기 실패: 0
if p[ny][nx] == 'P' and distance[y][x] <= 1:
return 0
# 'X'이면 파티션으로 가로막힌 것이므로 거리두기에 해당
# 방문한 곳은 큐에서 꺼내짐
# P에서 BFS가 끝나면 1 반환 (다른 곳의 P를 만났는데 맨해튼 거리 이내이면 먼저 0 반환)
return 1
def solution(places):
answer = []
for i in places:
answer.append(bfs(i))
return answer
반응형
'프로그래머스 > level 2' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2022.05.25 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 (0) | 2022.05.12 |
[프로그래머스] 프린터 (0) | 2022.05.11 |
[프로그래머스] 튜플 (0) | 2022.04.28 |
[프로그래머스] 전화번호 목록 (0) | 2022.04.21 |