일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 파이썬
- 추석맞이 코딩챌린지
- 정렬
- Re
- 다익스트라
- DateTime
- python
- 카카오
- 재귀함수
- 그리디
- BFS
- 백준
- 위클리 챌린지
- lambda
- Set
- 동적 계획법
- 정규식
- Combinations
- divmod
- heapq
- dfs
- KAKAO BLIND RECRUITMENT
- 수학
- Zip
- java
- 이분탐색
- 프로그래머스
- programmers
- 자바
- backjoon
Archives
- Today
- Total
상상쓰
[프로그래머스] 거리두기 확인하기 본문
https://programmers.co.kr/learn/courses/30/lessons/81302
자리에 응시자가 올 경우, 맨해튼 거리가 1인 자리에 빈 테이블이 온다면 '0' 를 'T' 로 변환한다. 응시자 간의 맨해튼의 거리가 2가 되더라도 맨해튼 거리가 1인 위치에 'T' 나오면 그것은 거리두기를 지키지 않은 것이라고 볼 수 있다.
def solution(places):
answer = []
D = [(1, 0), (0, 1), (-1, 0), (0, -1)]
for i in places:
for j in range(5):
i[j] = list(i[j])
for i in places:
T = True
for j in range(5):
for k in range(5):
if i[j][k] == 'P':
for x, y in D:
j_, k_ = j + x, k + y
if 0 <= j_ < 5 and 0 <= k_ < 5:
if i[j_][k_] == 'P' or i[j_][k_] == 'T':
T = False
break
if i[j_][k_] == 'O':
i[j_][k_] = 'T'
if not T: break
if not T: break
answer.append(1 if T else 0)
return answer
print(solution([['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]
'Coding Test' 카테고리의 다른 글
[프로그래머스] [1차] 추석 트래픽 (0) | 2021.07.13 |
---|---|
[백준] 크게 만들기 (0) | 2021.07.12 |
[프로그래머스] 호텔 방 배정 (0) | 2021.07.09 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.07.09 |
[백준] 단어 뒤집기 (0) | 2021.07.09 |
Comments