[PRO] 거리두기 확인하기

천호영·2022년 5월 2일
0

알고리즘

목록 보기
13/100
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/81302?language=python

거리두기를 지키지 않는 경우의 수를 생각한 뒤 각 경우를 if문으로 처리하면 풀리는 문제이다.
생각한 경우의 수는 다음 6가지였다. 형광펜처리된 P가 기준점이 되는 P이다.(초반풀이에서 5번만 생각하고 6번을 생각하지 못했었다)

def solution(places):
    answer = []
    
    for one_place in places:
        is_distance_okay = distance_check(one_place) # 한 place마다 계산
        answer.append(is_distance_okay)
    
    return answer


def distance_check(one_place):
    for i in range(5):
        for j in range(5):
            if one_place[i][j]=="P":
                if distance_false_person_exists(one_place,i,j):
                    return 0
    return 1 # 거리두기 모두 잘 지킴


def distance_false_person_exists(one_place,i,j):
    if j<4 and one_place[i][j+1]=="P":
        return True
    elif i<4 and one_place[i+1][j]=="P":
        return True
    
    
    elif j<3 and one_place[i][j+2]=="P" and one_place[i][j+1]=="O":
        return True
    elif i<3 and one_place[i+2][j]=="P" and one_place[i+1][j]=="O":
        return True
    
    
    elif i<4 and j<4 and one_place[i+1][j+1]=="P" and (one_place[i][j+1]=="O" or one_place[i+1][j]=="O"):
        return True
    elif i<4 and j>0 and one_place[i+1][j-1]=="P" and (one_place[i][j-1]=="O" or one_place[i+1][j]=="O"):
        return True # 대각선 역방향도 고려!
    else:
        return False
profile
성장!

0개의 댓글