@sleepysoong
[프로그래머스][5번째로 푼 문제] 120866. 안전지대 (240731) 본문
programming/잘 하는 언어는 없지만 문제는 풀어보고 싶어!
[프로그래머스][5번째로 푼 문제] 120866. 안전지대 (240731)
sleepysoong 2024. 11. 12. 14:12구분
코딩테스트 연습 > 코딩테스트 입문
제출 일자
2024년 07월 31일 17:08:44
문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board
에 1로 표시되어 있고 board
에는 지뢰가 매설된 지역 1과, 지뢰가 없는 지역 0만 존재합니다. 지뢰가 매설된 지역의 지도 board
가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution
함수를 완성해주세요.
제한사항
board
는 n * n 배열입니다.- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
board
에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예
board | result |
---|---|
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] | 16 |
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] | 13 |
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] | 0 |
def is_true(value):
return value
def solution(board):
field = {}
bomb = []
for x in range(len(board)):
for y in range(len(board[x])):
field[(x, y)] = True
if board[x][y] == 1:
bomb.append((x, y))
for bombX, bombY in bomb:
for x in range(bombX - 1, bombX + 2):
for y in range(bombY - 1, bombY + 2):
if (x, y) in field:
field[(x, y)] = False
return len(list(filter(is_true, field.values())))
느낀점
1학기 인천대학교 컴퓨터공학부 학생회 - 1학기 학술행사 마리오를 찾아라
에서 푼 미역! 줄기! 다시마!
문제가 떠오르는 문제였다.
이정민, 김대호, dlstn1612@gmail.com, daphne 외 28 명
님의 풀이
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)
풀고 나서 나의 소스를 리뷰해보니 왜 굳이 일반 구역까지 field에 넣었을까? 그냥 전체 구역 수에서 위험한 구역을 빼면 되잖아!
라고 생각했는데 역시나 고수들은 이런 식으로 효율적으로 작성했다.
danger
를 set
으로 하고 update
함수를 쓴 것과 enumerate
를 쓴 것까지 와우...
엄마, 나 무슨 과로 전과할까?
'programming > 잘 하는 언어는 없지만 문제는 풀어보고 싶어!' 카테고리의 다른 글
[프로그래머스][9번째로 푼 문제] 120853. 컨트롤 제트 (240828) (1) | 2024.11.12 |
---|---|
[프로그래머스][8번째로 푼 문제] 12906. 같은 숫자는 싫어 (240809) (1) | 2024.11.12 |
[프로그래머스][7번째로 푼 문제] 120871. 저주의 숫자 3 (240809) (0) | 2024.11.12 |
[프로그래머스][6번째로 푼 문제] 120843. 공 던지기 (240731) (1) | 2024.11.12 |
[프로그래머스][4번째로 푼 문제] 120869. 외계인 사전 (240731) (0) | 2024.11.12 |