코딩테스트 연습 - 거리두기 확인하기

[["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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
def solution(places):
    answer = [11111]
    def check_range(x, y):
        # 상하좌우 탐색(1칸)
        dx_1 = [-1100]
        dy_1 = [00-11]
        for i in range(4):
            nx = x + dx_1[i]
            ny = y + dy_1[i]
            if 0 <= nx < 5 and 0 <= ny < 5:
                if graph[nx][ny] == 'P':
                    return 0
 
        # 상하좌우 탐색(2칸)
        dx_3 = [-2200]
        dy_3 = [00-22]
        for i in range(4):
            nx = x + dx_3[i]
            ny = y + dy_3[i]
 
            px = x + dx_1[i]
            py = y + dy_1[i]
            if 0 <= nx < 5 and 0 <= ny < 5:
                if graph[nx][ny] == 'P':
                    if graph[px][py] != 'X':
                        return 0
 
 
        # 대각선 탐색 (파티션 2개)
        target = [[-1-1], [-11], [1-1], [11]]
        dx_2 = [[-10], [-10], [10], [10]]
        dy_2 = [[0-1], [01], [0-1], [01]]
 
        for i in range(4):
            tx = target[i][0+ x
            ty = target[i][1+ y
            nx1 = x + dx_2[i][0]
            ny1 = y + dy_2[i][0]
            nx2 = x + dx_2[i][1]
            ny2 = y + dy_2[i][1]
 
            if 0 <= tx < 5 and 0 <= ty < 5:
                if graph[tx][ty] == 'P':
                    if 0 <= nx1 < 5 and 0 <= nx2 < 5 and 0 <= ny1 < 5 and 0 <= ny2 < 5:
                        if graph[nx1][ny1] != 'X' or graph[nx2][ny2] != 'X':
                            return 0
        return 1
    for index, v in enumerate(places):
        graph = [list(map(str, i)) for i in v]
 
        for i in range(5):
            for j in range(5):
                if graph[i][j] == 'P':
                    if check_range(i, j) == 0:
                        answer[index] = 0
                        break
    return answer
 
 
= [["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"]]
print(solution(a))
cs

 

+ Recent posts