반응형
문제 풀이
문제 풀이 자체가 별로 없다.
P의 위치를 좌표 평면에서 x=0, y=0 이라고 했을때 맨하튼 거리가 2 이내 인 곳은 총 12 군데로
- west ⇒ [-2,0] , [-1,0]
- southwest ⇒ [-1,-1]
- south ⇒ [0, -2] , [0, -1]
- southeast ⇒ [+1, -1]
- east ⇒ [+2,0], [+1,0]
- northeast ⇒ [+1,+1]
- north ⇒ [0,+2], [0+1]
- northwest ⇒ [-1,+1]
이렇게 총 12개의 공간을 확인해야 한다.
1, 3, 5, 7 번의 공간의 경우 맨하튼 거리가 1인 경우 P가 존재한다면 무조건 False
맨하튼 거리가 2인 경우 P가 존재한다면 중간 공간의 값이 X가 아니라면 무조건 False
2, 4, 6, 8 번의 공간의 경우 대각선으로 X가 존재하지 않으면 무조건 False
위 12개의 공간에 대해 위 조건을 만족하는지 확인하는 valid_place 함수를 작성했다.
코드
def valid_place(x,y, places):
valid = True
# west-2
if 0 <= x-2 < 5: #places[x-2][y] != None:
if places[x-2][y] == "P":
if places[x-1][y] == "X":
valid=True
else:
valid=False
return valid
# west-1
if 0 <= x-1 < 5: #places[x-1][y] != None:
if places[x-1][y] == "P":
valid = False
return valid
#west-south
if 0<= x-1 <5 and 0<=y-1 < 5: #places[x-1][y-1] != None:
if places[x-1][y-1] == "P":
if places[x-1][y] == "X" and places[x][y-1] == "X":
valid = True
else:
valid = False
return valid
#south-2
if 0<=y-2<5: #places[x][y-2] != None:
if places[x][y-2] == "P":
if places[x][y-1] == "X":
valid = True
else:
valid = False
return valid
#south-1
if 0 <= y-1 < 5: #places[x][y-1] != None:
if places[x][y-1] == "P":
valid = False
return valid
#south-east
if 0<= x+1 < 5 and 0 <= y-1 <= 5: #places[x+1][y-1] != None:
if places[x+1][y-1] == "P":
if places[x+1][y] == "X" and places[x][y-1] == "X":
valid = True
else:
valid = False
return valid
#east-2
if 0<= x+2 < 5: #places[x+2][y] != None:
if places[x+2][y] == "P":
if places[x+1][y] == "X":
valid = True
else:
valid = False
return valid
#east-1
if 0<= x+1 < 5: #places[x+1][y] != None:
if places[x+1][y] == "P":
valid = False
return valid
#east-north
if 0<= x+1 < 5 and 0<= y+1 < 5: #places[x+1][y+1] != None:
if places[x+1][y+1] == "P":
if places[x+1][y] == "X" and places[x][y+1] == "X":
valid = True
else:
valid = False
return valid
#north-2
if 0<= y+2 < 5: #places[x][y+2] != None:
if places[x][y+2] == "P":
if places[x][y+1] == "X":
valid = True
else:
valid = False
return valid
# north-1
if 0 <= y+1 < 5: #places[x][y+1] != None:
if places[x][y+1] == "P":
valid = False
return valid
else:
valid = True
# north-west
if 0<= x-1 < 5 and 0<= y+1 < 5:#places[x-1][y+1] != None:
if places[x-1][y+1] == "P":
if places[x-1][y] == "X" and places[x][y+1] == "X":
valid=True
else:
valid=False
return valid
return valid
def solution(places):
answer = []
for room in places:
room_matrix = []
for obj in room:
temp = []
for a in obj:
temp.append(a)
room_matrix.append(temp)
flag = 1
for i in range(5):
for j in range(5):
if room_matrix[i][j] == "P":
if not valid_place(i,j,room_matrix):
flag = 0
answer.append(flag)
return answer
문제는 여기
https://programmers.co.kr/learn/courses/30/lessons/81302
반응형
'algorithm > programmers' 카테고리의 다른 글
쿼드압축 후 개수 세기 [프로그래머스] (0) | 2022.02.14 |
---|---|
배달 [프로그래머스] (0) | 2022.01.29 |
땅따먹기 [프로그래머스] (0) | 2021.11.26 |
후보키 [프로그래머스] (0) | 2021.11.25 |
순위 검색 [프로그래머스] (0) | 2021.11.22 |
댓글