상상쓰

[프로그래머스] 거리두기 확인하기 본문

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]
Comments