반응형
https://school.programmers.co.kr/learn/courses/30/lessons/81302
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
- solution 함수에서 현재 place의 P를 찾는다. 해당지점은 r1, c1의 되며 해당 지점 위치를 기준으로 다음 지점을 찾는다. 이때 P의 위치는 r2, c2가 된다.
- is_valid 함수에서 지점 A의 행부터 시작하여 해당 지점을 제외한 모든 열을 탐색한다. 이때 x 이전의 행렬들은 미리 확인한 영역이므로 계산하지 않는다.
- is_valid 함수에서 |r1 - r2| + |c1 - c2| 에 대한 두 개의 지점에 맨해튼 거리를 구해주며 2 이하 일 때의 조건 처리를 진행해 준다. 두 개의 지점을 기준으로 탐색하며 해당 지점을 제외한 행렬에 테이블 즉 "O"가 존재한다면 거리 두기에 해당하지 않는다.
def solution(places):
n = len(places[0])
answer = [1] * n
for idx, place in enumerate(places):
out = False
for i in range(n):
for j in range(n):
if place[i][j] == "P":
if not is_valid(place, (n, i, j)):
answer[idx] = 0
out = True
break
if out:
break
return answer
def is_valid(place, point):
n, x, y = point
for i in range(x, n):
for j in range(n):
if x == i and y == j:
continue
if place[i][j] == "P":
dist = abs(x - i) + abs(y - j)
if dist < 2:
return False
if dist == 2:
for k in range(min(x, i), max(x, i) + 1):
for l in range(min(y, j), max(y, j) + 1):
if x == k and y == l or i == k and j == l:
continue
if place[k][l] == "O":
return False
return True
'프로그래머스 > lv.2' 카테고리의 다른 글
의상 (0) | 2024.03.20 |
---|---|
쿼드압축 후 개수 세기 (0) | 2024.03.20 |
행렬 테두리 회전하기 (2) | 2024.03.18 |
배달 (0) | 2024.03.16 |
수식 최대화 (0) | 2024.03.16 |