[프로그래머스] Lv.0 안전지대 파이썬 코드 풀이
2023. 1. 24. 23:00ㆍ프로그래밍/자료구조 및 알고리즘
반응형
문제설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
나의 풀이
핵심은, 지뢰의 좌표를 구하여서, 그 주변 8방향에 대해 지뢰를 추가적으로 설치한 후에, 지뢰가 없는 지역을 세주면 된다.
객체지향 프로그래밍 연습을 해보기 위해 아래와 같이 구현해보았다.
class Mine():
def __init__(self, board):
self.coord = board
self.N = len(board)
def check_mine_position(self):
mine_pos = []
for x in range(self.N):
for y in range(self.N):
if self.coord[x][y] == 1 :
mine_pos.append((x,y))
return mine_pos
def set_bomb(self, mine):
# 11, 12, 1
# 9, 3
# 7, 6, 5
dx = [-1, 0, 1, -1, 1, -1, 0, 1]
dy = [1, 1, 1, 0, 0, -1, -1, -1]
for x, y in mine :
if self.coord[x][y] == 1:
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
# inside the board
if 0 <= nx < self.N and 0<= ny <self.N :
self.coord[nx][ny] = 1
def check_board(self):
print(self.coord)
def count_safezone(self):
count = 0
for x in range(self.N):
for y in range(self.N):
if self.coord[x][y] == 0 :
count += 1
return count
def solution(board):
a = Mine(board)
# 지뢰의 좌표 체크
mine = a.check_mine_position()
# 지뢰 주변에 지뢰 설치
a.set_bomb(mine)
# a.check_board()
# 지뢰이 설치되지 않은 좌표의 수 세기
return a.count_safezone()
반응형
'프로그래밍 > 자료구조 및 알고리즘' 카테고리의 다른 글
[백트래킹, 백준] N과 M (1), (2) <중복을 허용하지 않는 순열, 조합> (1) | 2023.09.03 |
---|---|
[백트래킹, 코드트리] 아름다운 수 (0) | 2023.08.15 |
[프로그래머스] 숫자의 표현 - 파이썬 풀이 (0) | 2023.02.14 |
[자료구조, 파이썬] 리스트, 딕셔너리, 튜플(list, dict, tuple) (0) | 2023.01.18 |
[프로그래머스] 코딩테스트 연습 - 이중우선순위큐 풀이 (파이썬) (1) | 2023.01.03 |