반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120866
문제
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board
에 1로 표시되어 있고 board
에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board
가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
내 답안
def solution(board):
answer = 0
bomb = []
n = len(board)
#폭탄 찾기
for i in range(n):
for j in range(n):
if board[i][j] == 1:
bomb.append((i, j))
#폭탄 설치
for x, y in bomb:
for i in [-1, 0, 1]:
for j in [-1, 0, 1]:
nx = x + i
ny = y + j
if 0 <= nx < n and 0 <= ny < n:
board[nx][ny] = 1
#카운트
for i in range(n):
for j in range(n):
if board[i][j] == 0:
answer += 1
return answer
남의 풀이
def solution(board):
n = len(board)
danger = set()
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x:
continue
danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)
결론 및 느낀점
남의 풀이를 보면, 집합을 사용하여 위험 지역을 표시하는 방법이 인상적이었습니다. 이 방법은 중복을 피하면서 간결하게 위험 영역을 관리할 수 있다는 장점이 있습니다. 특히 집합을 활용하면 자동으로 중복 처리가 되기 때문에 성능적으로도 유리할 수 있습니다.
두 방법을 비교해 보면, 남의 풀이가 더 효율적이고 간결하지만, 내 방법도 이 문제의 핵심 개념을 잘 이해하고 있어야 작성할 수 있기 때문에 유용한 연습이 되었습니다. 실제 개발에서도 이러한 문제 해결 방식이 다양한 상황에 응용될 수 있음을 깨달았습니다. 이번 기회를 통해 배열과 집합을 조금 더 효과적으로 사용하는 방법을 배울 수 있었습니다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[KAKAO BLIND RECRUITMENT / 2022 / Python] 양과 늑대 (2) | 2025.06.03 |
---|---|
[프로그래머스 / PCCP 기출문제 9번 / Python] 지폐 접기 (6) | 2025.06.03 |
[프로그래머스 / Python] OX퀴즈 (0) | 2025.05.31 |
[프로그래머스 / Python] 등수 매기기 (2) | 2025.05.31 |
[프로그래머스 / Python] 영어가 싫어요 (0) | 2025.05.31 |