[프로그래머스 / Python] 안전지대

2025. 5. 31. 20:45·Algorithm/프로그래머스
반응형

문제 출처

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


문제

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.


내 답안

def solution(board):
    answer = 0
    bomb = []
    n = len(board)

    #폭탄 찾기
    for i in range(n):
        for j in range(n):
            if board[i][j] == 1:
                bomb.append((i, j)) 

    #폭탄 설치
    for x, y in bomb:
        for i in [-1, 0, 1]:
            for j in [-1, 0, 1]:
                nx = x + i
                ny = y + j
                if 0 <= nx < n and 0 <= ny < n:
                    board[nx][ny] = 1

    #카운트
    for i in range(n):
        for j in range(n):
            if board[i][j] == 0:
                answer += 1

    return answer

남의 풀이

def solution(board):
    n = len(board)
    danger = set()
    for i, row in enumerate(board):
        for j, x in enumerate(row):
            if not x:
                continue
            danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
    return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)

결론 및 느낀점

남의 풀이를 보면, 집합을 사용하여 위험 지역을 표시하는 방법이 인상적이었습니다. 이 방법은 중복을 피하면서 간결하게 위험 영역을 관리할 수 있다는 장점이 있습니다. 특히 집합을 활용하면 자동으로 중복 처리가 되기 때문에 성능적으로도 유리할 수 있습니다.

두 방법을 비교해 보면, 남의 풀이가 더 효율적이고 간결하지만, 내 방법도 이 문제의 핵심 개념을 잘 이해하고 있어야 작성할 수 있기 때문에 유용한 연습이 되었습니다. 실제 개발에서도 이러한 문제 해결 방식이 다양한 상황에 응용될 수 있음을 깨달았습니다. 이번 기회를 통해 배열과 집합을 조금 더 효과적으로 사용하는 방법을 배울 수 있었습니다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > 프로그래머스' 카테고리의 다른 글

[KAKAO BLIND RECRUITMENT / 2022 / Python] 양과 늑대  (2) 2025.06.03
[프로그래머스 / PCCP 기출문제 9번 / Python] 지폐 접기  (6) 2025.06.03
[프로그래머스 / Python] OX퀴즈  (0) 2025.05.31
[프로그래머스 / Python] 등수 매기기  (2) 2025.05.31
[프로그래머스 / Python] 영어가 싫어요  (0) 2025.05.31
'Algorithm/프로그래머스' 카테고리의 다른 글
  • [KAKAO BLIND RECRUITMENT / 2022 / Python] 양과 늑대
  • [프로그래머스 / PCCP 기출문제 9번 / Python] 지폐 접기
  • [프로그래머스 / Python] OX퀴즈
  • [프로그래머스 / Python] 등수 매기기
Kun Woo Kim
Kun Woo Kim
안녕하세요, 김건우입니다! 웹과 앱 개발에 열정적인 전문가로, React, TypeScript, Next.js, Node.js, Express, Flutter 등을 활용한 프로젝트를 다룹니다. 제 블로그에서는 개발 여정, 기술 분석, 실용적 코딩 팁을 공유합니다. 창의적인 솔루션을 실제로 적용하는 과정의 통찰도 나눌 예정이니, 궁금한 점이나 상담은 언제든 환영합니다.
  • Kun Woo Kim
    WhiteMouseDev
    김건우
  • 깃허브
    포트폴리오
    velog
  • 전체
    오늘
    어제
  • 공지사항

    • [인사말] 이제 티스토리에서도 만나요! WhiteMouse⋯
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (99) N
      • Frontend Development (38)
      • Backend Development (21) N
      • Algorithm (33) N
        • 백준 (11) N
        • 프로그래머스 (17)
        • 알고리즘 (5)
      • Infra (1)
      • 자료구조 (3)
  • 링크

    • Github
    • Portfolio
    • Velog
  • 인기 글

  • 태그

    frontend development
    tailwindcss
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kun Woo Kim
[프로그래머스 / Python] 안전지대
상단으로

티스토리툴바