📜 문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120866
💡 문제 풀이
풀다보니까 코드라인이 길어졌다
간단하게 문제를 풀기 위해서 주어진 배열판에 전체적으로 앞뒤위아래에 0을 하나씩 넣어줘서 안전지대를 만들었다.
그리고 새로운 배열을 하나 만들어서 1에서 길이 - 1만큼만 순회하면서 기존 값이 1이면 무조건 1을 넣고 그게 아닐 경우에는 상하좌우대각선 중에 가장 큰 값을 새로운 배열에 넣어준다.
그 후에 새로운 배열에서 0의 갯수를 세면 안전지대의 갯수를 알 수 있다.
def solution(board):
answer = 0
n = len(board)
tmp = [0] * (n + 2)
board_tmp = []
for i in range(n):
board[i].insert(0, 0)
board[i].append(0)
board.insert(0, tmp)
board.append(tmp)
for i in range(1, n + 1):
tmp = []
for j in range(1, n + 1):
if board[i][j]:
a = 1
else:
a = max(board[i - 1][j], board[i][j - 1], board[i - 1][j - 1], board[i + 1][j], board[i][j + 1], board[i + 1][j + 1], board[i - 1][j + 1], board[i + 1][j - 1])
tmp.append(a)
board_tmp.append(tmp)
for i in range(n):
answer += board_tmp[i].count(0)
return answer
반응형
'✨APS (Algorithm Problem Solving) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] LV.1 크기가 작은 부분 문자열 / 파이썬(Python), 자바(JAVA) (0) | 2023.01.31 |
---|---|
[프로그래머스] LV.2 숫자 변환하기 / 파이썬(Python) (0) | 2023.01.30 |
[프로그래머스] LV.0 최댓값 만들기 (2) / 자바(JAVA) - 7번 테케 잡기 (0) | 2022.12.22 |
[프로그래머스] LV.1 가장 가까운 같은 글자 / 파이썬(Python) (0) | 2022.12.16 |
[프로그래머스] LV.0 암호 해독 / 자바(JAVA) (0) | 2022.12.15 |