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 | 29 | 30 |
Tags
- 그리디알고리즘 #그리디 #백준 #우선순위큐 #최소힙 #최대힙 #알고리즘 #코딩테스트 #python
- 프로그래머스 #python #코딩테스트 #코테공부 #알고리즘 #dict
- 프로그래머스 #네트워크 #c++ #코딩테스트 #코테 #코테준비 #dfs
- 백준 #백준2217 #백준로프 #python
- 프로그래머스 #NULL 처리하기
- 프로그래머스 #c++ #코딩테스트
- 백준 #백준알고리즘 #알고리즘 #코딩테스트 #코딩테스트준비 #코테준비 #백준2110 #python #문제풀이
- 백준 #이거다시풀기
- 프로그래머스 #sql #mysql #코딩테스트
- 카카오 #프로그래머스 #python #코딩테스트 #오픈채팅방
- 프로그래머스 #python #2021카카오 #카카오코테 #카카오인턴쉽
- 동
- 카카오 코테
Archives
- Today
- Total
say repository
[프로그래머스] 거리두기 확인하기 python (*) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/81302
출처 : 프로그래머스
코딩테스트 연습 - 거리두기 확인하기
[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]
programmers.co.kr
from collections import deque
def bfs(p):
start = [] # P(사람) 마다 bfs해야함
for i in range(len(p)):
for j in range(len(p)):
if p[i][j] == "P":
start.append((i,j))
# start p좌표마다
for s in start:
q = deque()
q.append(s) # 큐에 시작 p좌표 삽입
visited = [[0]*5 for _ in range(5)]
distance = [[0]*5 for _ in range(5)]
visited[s[0]][s[1]] = 1 # 처음 p좌표 방문처리
while q:
x, y = q.popleft()
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<5 and 0<=ny<5 and not visited[nx][ny]:
if p[nx][ny] == 'O': # 빈 책상이면
q.append((nx,ny))
visited[nx][ny] = 1 # 방문처리
distance[nx][ny] = distance[x][y] + 1 #거리 업데이트
elif p[nx][ny] == 'P':
distance[nx][ny] = distance[x][y]+1
if distance[nx][ny]<=2:
return 0
return 1
def solution(places):
answer = []
for i in places:
answer.append(bfs(i))
return answer
풀이
bfs로 풀이했다.
p(사람) 마다 주변에 p(사람) 이 맨해튼 거리가 2 이하인 거리에 있는지를 확인해야 한다.
파티션이 있으면 상하좌우 이동이 안 되는 것이고, O(빈 책상) 이 있으면 이동 가능하다.
p마다 bfs를 수행해야 하니, p의 좌표를 모두 start에 넣어서 관리한다.
.
이는 나중에 다시 풀어보도록 하자.
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 python (*) (0) | 2022.04.12 |
---|---|
[프로그래머스] 피보나치 수 Python (0) | 2022.04.11 |
[프로그래머스] 기능개발 python (0) | 2022.04.09 |
[프로그래머스] 오픈채팅방 python (0) | 2022.04.09 |
[프로그래머스] 최솟값 만들기 python (0) | 2022.04.06 |