Completion over Perfection

프로그래머스 - 안전지대 (파이썬3 Python3) 본문

파이썬 (Python)

프로그래머스 - 안전지대 (파이썬3 Python3)

난차차 2023. 8. 21. 17:03
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120866

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

지뢰가 있는 지역을 중심으로 8방향을 모두 위험지역으로 체크해주고, 

안전한 지역을 세서 답으로 출력해주면 됩니다. 

 

다만 주의할 점은 예를 들어 첫번째 예시에서 4X3 지역에 지뢰가 설치되어 있는데요, 

이 주변 구역을 돌면서 지뢰가 있는 8방향을 숫자 1로 바꿔버린다면 

다음 for문을 돌때 1로 갱신된 지역이 마치 원래 지뢰가 있었던 지역처럼 인식되어 버린다는 점을 주의해야 합니다. 

 

그래서 저는 isVisited라는 boolean 배열을 별도로 선언해주고, 

(지뢰가 있건 없건) 해당 구역을 방문했는지 안했는지에 대해 체크해주고, 

나중에 답을 도출할 때는 isVisited 배열을 기준으로 안전한 구역을 세 주었습니다. 

 

코드 참고해주세요. 

 

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
dx = [111-1-1-100]
dy = [10-110-11-1]
 
def mark(x, y):
    global map
    global isVisited
    for i in range(8):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx<0 or ny<0 or nx>=len(map) or ny>=len(map[0]) or isVisited[nx][ny] == True:
            continue
        else:
            isVisited[nx][ny] = True
 
 
def solution(board):
    global map
    global isVisited
    map = board
    isVisited = [[False for i in range(len(board[0]))] for j in range(len(board))]
    answer = 0
    for i in range(len(map)):
        for j in range(len(map[0])):
            if map[i][j] == 1:
                isVisited[i][j] = True
                mark(i,j)
 
    for i in range(len(isVisited)):
        for j in range(len(isVisited[0])):
            if isVisited[i][j] == False:
                answer += 1
                
    return answer
cs
반응형
Comments