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

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

문제 출처

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)

결론 및 느낀점

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

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

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

'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⋯
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (152)
      • Frontend Development (68)
        • [실습] 실시간 트레이딩 대시보드 만들기 (4)
      • Backend Development (28)
      • AI · ML (5)
        • Computer Vision (5)
      • Algorithm (35)
        • 백준 (11)
        • 프로그래머스 (18)
        • 알고리즘 (5)
      • Infra (1)
      • 자료구조 (4)
      • Language (6)
        • JavaScript (6)
      • 자격증 공부 (1)
        • GCP Developer (1)
      • Tools (1)
  • 링크

    • Github
    • Portfolio
    • Velog
  • 인기 글

  • 태그

    YOLO
    oversampling
    Human-in-the-Loop
    Synthetic-Data
    객체탐지
    claudecode
    Data-Augmentation
    Object Detection
    Nextjs
    Vision-Language-Model
    backend
    AI
    데이터증강
    src layout
    rt-detr
    딥러닝
    AI개발
    컴퓨터비전
    모델비교
    flat layout
    Qwen2.5-VL
    API Gateway
    deep-learning
    tailwindcss
    합성데이터
    mlops
    Machine-learning
    Class-Imbalance
    multiagent
    AgentTeams
  • 최근 댓글

  • 최근 글

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

티스토리툴바