ALGORITHM/Kakao

[Python] 거리두기 확인하기

김쿸후 2021. 10. 5. 23:47

1. 문제

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

 

2. 풀이

dfs로 경로를 확인할때는 ... 

-> 이쪽한번 했으면

<- 이쪽으로도 확인해야 돼요

 

3. 코드

def dfsr(places,x,y,answer):
    if (x>=5): return False
    if (y>=5): return False
    if places[x][y] == 'X':
        return False
    if places[x][y] == 'P':
        if answer >2 : 
            return False
        else :
            return True
    if places[x][y] == 'O':
        return (dfsr(places,x+1,y,answer +1) or dfsr(places,x,y+1,answer +1))

def dfsl(places,x,y,answer):
    if (x<0): return False
    if (y>=5): return False
    if places[x][y] == 'X':
        return False
    if places[x][y] == 'P':
        if answer >2 : 
            return False
        else :
            return True
    if places[x][y] == 'O':
        return (dfsl(places,x-1,y,answer +1) or dfsl(places,x,y+1,answer +1))
    
    
def solution(places):
    answer = []
    for i in places:
        flag = True
        for x in range(5) :
            for y in range(5):
                if i[x][y] == 'P':
                    if(dfsr(i,x+1,y,1) or dfsr(i,x,y+1,1) or dfsl(i,x-1,y,1)or dfsl(i,x,y+1,1)):
                        flag = False
        if(flag):
            answer.append(1)
        else:
            answer.append(0)

    return answer

'ALGORITHM > Kakao' 카테고리의 다른 글

[Python] 메뉴 리뉴얼  (0) 2021.10.08
[Python] 삼각달팽이  (0) 2021.10.08
[Python] 문자열 압축  (0) 2021.10.05
[Python] 괄호 회전하기  (0) 2021.10.05
[Python] 비밀지도  (0) 2021.10.03