본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(코딩테스트 입문) : 안전지대

반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

배열을 다뤄본 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 자기 자신의 좌표를 포함해 인접한 상하좌우 대각선에 대한 9개 좌표 dr, dc배열을 선언해줍니다.

 

2. 정답 변수 answer를 선언 후 0으로 초기화합니다.

 

3. n을 선언 후 board의 길이를 저장합니다.

 

4. is_safe배열 선언 후 n*n으로 각 방을 1로 저장합니다.

📔 풀이과정

n * n으로 for loop를 수행하며 다음을 진행합니다.

1. 지뢰인 경우 9개의 좌표가 모두 위험지대로 바뀌어야하므로 is_safe에 해당 좌표들을 0으로 갱신합니다. 다음 좌표는 지역변수 nr, nc를 선언해 현재 좌표 i, j 에 각각 dr[dir], dc[dir[을 더해줌으로써 구할 수 있습니다.

 

2. is_safe의 원소를 순회하며 안전지대라면 answer를 1씩 더해줍니다.

📔 정답 출력 | 반환

answer를 반환합니다.


📕 Code

📔 Python3

def solution(board):
    dr = [-1, -1, -1, 0, 0, 0, 1, 1, 1]
    dc = [-1, 0, 1, -1, 0, 1, -1, 0, 1]
    answer = 0
    n = len(board)
    is_safe = [[1]*n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            if board[i][j] == 0:
                continue
            for dir in range(9):
                nr = i + dr[dir]
                nc = j + dc[dir]
                if 0 > nr or nr >= n or 0 > nc or nc >= n:
                    continue
                is_safe[nr][nc] = 0
    for i in range(0, n):
        for j in range(0, n):
            if is_safe[i][j] == 1:
                answer += 1
    return answer

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.