목차
위험 지역
n*n 이차원 배열에 특정 지역의 지뢰정보가 지도로 주어집니다. 만약 아래와 같이 5*5의 지도에 지뢰정보가 주어지면
위에 지도에서 1은 지뢰가 매설된 지역이고, 0은 빈땅입니다.
위에 지도에서 지뢰가 매설된 격자와 상하좌우 대각선으로 인접한 8개의 빈땅 격자를 위험지 역입니다. 위에 지도에서 위험지역은 총 14개입니다.
매개변수 board에 특정지역의 지뢰정보가 담겨진 지도가 주어지면 이 지역에 위험지역이 총 몇 개 있는지 반환하는 프로그램을 작성하세요.
제한사항:
• 3 <= n <= 30
나의 코드
def solution(board):
answer = 0
dx=[-1,-1,0,1,1,1,0,-1]
dy=[0,1,1,1,0,-1,-1,-1]
for i in range(len(board)):
for j in range(len(board)):
if board[i][j]==1:
for k in range(8):
nx=i+dx[k]
ny=j+dy[k]
if 0<=nx<len(board) and 0<=ny<len(board) and board[nx][ny]==0:
board[nx][ny]=2
answer+=1
return answer
print(solution([[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]))
print(solution([[1, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0]]))
print(solution([[0, 1, 0, 0, 0, 1], [0, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0], [1, 0, 0, 1, 0, 0]]))
print(solution([[0, 1, 0, 0, 0, 1, 0], [0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1], [0, 0, 0, 0, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 1, 0, 0, 1], [1, 0, 0, 1, 0, 0, 0]]))
방향 벡터가 4방향에서 8방향으로 늘어난것과 0인 부분을 2로 체크해주는것 말고는 이전 시물레이션 문제와 동일한 것같다.
정답코드
def solution(board):
answer = 0
dx=[-1, -1, 0, 1, 1, 1, 0, -1]
dy=[0, 1, 1, 1, 0, -1, -1, -1]
n = len(board)
for i in range(n):
for j in range(n):
if board[i][j] == 1:
for k in range(8):
nx = i + dx[k]
ny = j + dy[k]
if nx >= 0 and nx < n and ny >= 0 and ny < n and board[nx][ny] == 0:
answer += 1
board[nx][ny] = 2
return answer
print(solution([[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]))
print(solution([[1, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0]]))
print(solution([[0, 1, 0, 0, 0, 1], [0, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0], [1, 0, 0, 1, 0, 0]]))
print(solution([[0, 1, 0, 0, 0, 1, 0], [0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1], [0, 0, 0, 0, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 1, 0, 0, 1], [1, 0, 0, 1, 0, 0, 0]]))
나의 코드와 일치한다!
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[정렬] - 두 수의 차 (0) | 2024.01.22 |
---|---|
[정렬] -사탕 (0) | 2024.01.22 |
[시물레이션] - 로봇의 이동 (0) | 2024.01.22 |
[시물레이션] -청소로봇 2 (0) | 2024.01.22 |
[시물레이션] -청소로봇 1 (0) | 2024.01.22 |