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
                            
                        
                          
                          - 프로그래머스
 - Get
 - react-redux
 - 자바
 - 이코테
 - 알고리즘
 - programmers
 - 테코테코
 - json-server
 - useDispatch
 - java
 - redux-toolkit
 - Python
 - maeil-mail
 - C++
 - 코딩테스트합격자되기
 - Algorithm
 - 항해플러스
 - axios
 - react-router
 - SW
 - 리액트
 - redux-saga
 - redux
 - JavaScript
 - sw expert academy
 - createSlice
 - 항해99
 - 매일메일
 - react
 
                            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
[프로그래머스] LEVEL2 거리두기 확인하기 (Python)
프로그래머스 알고리즘 풀이
velog.io
반응형
    
    
    
  '프로그래머스 > level 2' 카테고리의 다른 글
| [프로그래머스] 기능개발 (0) | 2022.05.25 | 
|---|---|
| [프로그래머스] 행렬 테두리 회전하기 (0) | 2022.05.12 | 
| [프로그래머스] 프린터 (0) | 2022.05.11 | 
| [프로그래머스] 튜플 (1) | 2022.04.28 | 
| [프로그래머스] 전화번호 목록 (0) | 2022.04.21 |