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 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @Builder
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
Archives
- Today
- Total
기록
프로그래머스_거리두기 확인하기 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/81302
풀이
이 문제는 DFS와 BFS 2가지 방법으로 모두 풀이 가능하다. 그래프의 크기가 5x5로 고정이기에 시간 초과 및 메모리 초과를 고려하지 않아도 된다.
깊이를 초과하지 않는 선에서 탐색을 진행한다.
1. PP 패턴
2. POP 패턴
2가지가 나타나지 않으면 거리두기를 지키고 있다고 판단한다.
깊이 1
깊이 2
코드
# 5줄 5행 범위 내에 있는지 확인
check = lambda i, j : 0<=i<5 and 0<=j<5
def f(place) :
for i in range(5) :
for j in range(5) :
if place[i][j]=='P' :
stack = [(i, j, place[i][j])]
while stack :
mi, mj, m = stack.pop()
if m=='PP' : return 0
if m=='POP' : return 0
if len(m)<3 : # ↑, ←, ↓, →
for i_, j_ in [(mi-1, mj), (mi, mj-1), (mi+1, mj), (mi, mj+1)] :
if check(i_, j_) and (i, j)!=(i_, j_) :
stack.append((i_, j_, m+place[i_][j_]))
return 1
def solution(places):
return [f(p) for p in places]
'코딩테스트 > python' 카테고리의 다른 글
프로그래머스_python_다단계 칫솔 판매 (0) | 2021.12.22 |
---|---|
프로그래머스_피로도 (0) | 2021.12.13 |
프로그래머스_표 편집 (0) | 2021.08.28 |
[수정중] 백준_4811_알약 (0) | 2021.08.09 |
프로그래머스_스티커 모으기(2) (0) | 2021.06.16 |
Comments