프로그래머스 안전지대
https://school.programmers.co.kr/learn/courses/30/lessons/120866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(board):
n = len(board)
danger_zone = set()
for row_idx in range(n):
for col_idx in range(n):
if board[row_idx][col_idx] == 1:
row_start = 0 if row_idx == 0 else -1
row_end = 0 if row_idx == n - 1 else 1
col_start = 0 if col_idx == 0 else -1
col_end = 0 if col_idx == n - 1 else 1
for i in range(row_idx + row_start, row_idx + row_end + 1):
for j in range(col_idx + col_start, col_idx + col_end + 1):
danger_zone.add((i, j))
return n ** 2 - len(danger_zone)
정석 풀이는 아직 보진 않았지만
위 코드대로 푸는 방식이 아니었을 거 같다.
내 경우에는 지뢰 설치 지역 및 위험 지역을 danger_zone 에 모은 다음
return할 때 전체 칸 수에서 빼는 방식으로 진행했다.
danger_zone 은 중복 문제를 해결하기 위해 set으로 정의했으며
그 외로는 지뢰 설치 지역이 꼭짓점이냐 변이냐에 따라 if문을 통해 상황을 분류하고
그에 맞춰 danger_zone에 요소를 추가하는 것이 끝이다.
위험 지역은 지뢰 설치 좌표를 기준으로 기본적으로 ±1 의 범위를 가진다.
예를 들어 설치 좌표가 (2, 2) 라면
(1, 1) | (2, 1) | (3, 1) |
(1, 2) | (2, 2) | (3, 2) |
(1, 3) | (2, 3) | (3, 3) |
좌표를 (x, y) 형태로 볼 때 x, y는 각각 ±1 의 범위를 가짐을 알 수 있다.
위의 예시를 보면 1(2-1)부터 3(2+1) 까지 이다.
나는 이 -1, +1을 각각
row_start, row_end
col_start, col_end
라는 변수로 정의하고
지뢰 설치 지역이 특수한 상황(꼭짓점, 변)이 아니라면 start는 -1, end는 1이 되도록 했다.
위험 지역 좌표는 range와 for문을 통해 danger_zone에 add 한다.
이후 (전체 지역 수 - 위험 지역 수)를 리턴한다.
'CS > 알고리즘' 카테고리의 다른 글
프로그래머스 H-Index - 1 (0) | 2024.07.08 |
---|---|
[WIL] 20240311 ~ 20240315 5주차 정리 (1) | 2024.03.15 |
[TIL] 20240315 23일차 (0) | 2024.03.15 |
[TIL] 20240314 22일차 (0) | 2024.03.14 |
[TIL] 20240313 21일차 (0) | 2024.03.13 |