코딩테스트 연습 - 거리두기 확인하기
[["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 = [1, 1, 1, 1, 1]
def check_range(x, y):
# 상하좌우 탐색(1칸)
dx_1 = [-1, 1, 0, 0]
dy_1 = [0, 0, -1, 1]
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 = [-2, 2, 0, 0]
dy_3 = [0, 0, -2, 2]
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], [-1, 1], [1, -1], [1, 1]]
dx_2 = [[-1, 0], [-1, 0], [1, 0], [1, 0]]
dy_2 = [[0, -1], [0, 1], [0, -1], [0, 1]]
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
a = [["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 |
'알고리즘 문제풀이 with 파이썬 > 프로그래머스' 카테고리의 다른 글
[큐] 다리를 지나는 트럭 (0) | 2021.10.02 |
---|---|
[문자열] 메뉴 리뉴얼 (0) | 2021.09.30 |
[문자열] 뉴스 클러스트링 (0) | 2021.09.21 |
[해시] 전화번호 목록 (0) | 2021.09.07 |
[문자열, 정규식] 튜플 (0) | 2021.09.07 |