Coding Test
[프로그래머스] 거리두기 확인하기
상상쓰
2021. 7. 11. 11:15
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
자리에 응시자가 올 경우, 맨해튼 거리가 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]