[프로그래머스]2021 카카오 채용인턴십 - 거리두기 확인하기 (Python)

0

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/81302

지난주에 배운 BFS를 복습해보고자 풀이를 했다.
하지만 bfs로 하지않고
문제 자체에서 5x5라고 명시를 해주었기 때문에
그냥 완전탐색으로 풀어도 되는 문제이다.

거리두기가 위배되는 경우
1.근접
2.대각선에 P가 있고 근접에 파티션이 하나라도 없는 경우
3.2칸거리의 P사이에 파티션이 없는경우

이러한 경우를 조건으로 잘 걸어두면 풀림

풀이

def check(graph):
    dx,dy=[1,0,-1,0],[0,1,0,-1]#상하좌우
    dx2,dy2=[1,-1,1,-1],[1,1,-1,-1]#대각선
    for x in range(5):
        for y in range(5):
            if graph[x][y]!='P':
                continue
            #근접 
            for i in range(4):
                nx,ny=x+dx[i],y+dy[i]
                if 0<=nx<5 and 0<=ny<5 and graph[nx][ny]=='P':
                    return 0
            # 대각선
            for i in range(4):
                nx,ny=x+dx2[i],y+dy2[i]
                if 0<=nx<5 and 0<=ny<5 and graph[nx][ny]=='P':
                    if graph[x][ny]=='O' or graph[nx][y]=='O':
                        return 0
            # 2칸
            for i in range(4):
                nx,ny=x+2*dx[i],y+2*dy[i]
                if 0<=nx<5 and 0<=ny<5 and graph[nx][ny]=='P':
                    if graph[x+dx[i]][y+dy[i]] != 'X':
                        return 0
    return 1         
            
def solution(places):
    answer= [check(i) for i in places]
    return answer

그래프문제 풀때 오타때문에 디버깅에 시간을 너무많이 쓰는것 같아서
꼼꼼히 푸는 연습을 더 해야겠다고 생각했다.

0개의 댓글