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
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- aws iam role
- AWS KMS
Archives
- Today
- Total
기록
프로그래머스_거리두기 확인하기 본문
문제
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
풀이
이 문제는 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