Programmers / [PCCP 기출문제] 2번 / 석유 시추 / python

2025. 2. 18. 14:20·코딩테스트/programmers (python)

 

 

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/250136

 

 

나의 풀이

from collections import deque

def solution(land):
    n, m = len(land), len(land[0])
    visited = [[False] * m for _ in range(n)] 
    col_oil = [0] * m
    
    
    def bfs(a, b):
        dx = [-1, 1, 0, 0]
        dy = [0, 0, -1, 1]
        
        queue = deque([(a, b)])
        visited[a][b] = True
        size = 0
        columns = set()
        
        while queue:
            x, y = queue.popleft()
            size += 1
            columns.add(y)

            for i in range(4):
                nx = x + dx[i]
                ny = y + dy[i]

                if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny] and land[nx][ny] == 1:
                    visited[nx][ny] = True
                    queue.append((nx, ny))
        
        for col in columns:
            col_oil[col] += size
    
    for i in range(n):
        for j in range(m):
            if land[i][j] == 1 and not visited[i][j]:
                bfs(i, j)
    return max(col_oil)

 

 

석유 덩어리의 크기를 계산하기 위해 BFS로 조건 검사하며 돌고, 땅의 열 col_oil에 크기를 누적시키며 더하여 저장한다. 이를 통해 최댓값을 찾아 최적의 시추관 위치를 도출할 수 있다.

 

처음에 문제를 보고 열에 석유 덩어리의 크기를 누적시켜 계산하면 되겠다고 생각하였는데 구현을 어떻게 해야할지 고민이 되었다. queue에서 popleft() 된 y 값을 집합 set()에 넣음으로써 한 열에서 한 덩어리가 중복 저장되지 않게 구현할 수 있다 !

'코딩테스트 > programmers (python)' 카테고리의 다른 글

Programmers / [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 / python  (0) 2025.03.16
Programmers / [PCCP 기출문제] 1번 / 동영상 재생기 / python  (0) 2025.02.23
Programmers / [PCCP 모의고사 1회] 3번 / 붕대 감기 / python  (0) 2025.02.14
Programmers / [PCCP 모의고사 1회] 3번 / 유전법칙 / python  (0) 2025.02.14
Programmers / 2단계 / 행렬 테두리 회전하기 / python  (0) 2024.09.02
'코딩테스트/programmers (python)' 카테고리의 다른 글
  • Programmers / [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 / python
  • Programmers / [PCCP 기출문제] 1번 / 동영상 재생기 / python
  • Programmers / [PCCP 모의고사 1회] 3번 / 붕대 감기 / python
  • Programmers / [PCCP 모의고사 1회] 3번 / 유전법칙 / python
seulll
seulll
개인 공부 / 정리 블로그입니다
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (332) N
      • 코딩테스트 (227) N
        • programmers (python) (156)
        • 백준 (python) (69) N
      • 자료구조 | 알고리즘 (14)
      • 개발 | 프로젝트 (40)
        • Python (4)
        • Java | Spring (7)
        • Android (4)
        • Unity (3)
        • API (4)
      • CS (15)
        • Network (5)
        • SQL (2)
        • OS (4)
      • 데이터 분석 (14)
      • 기타 (13) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    웹크롤링
    Boxplot
    Python
    solving environment
    코딩테스트
    오차행렬
    프렌즈4블록
    백엔드
    파이썬
    asterisk
    백엔드 개발자 역량
    대입 표현식
    바다코끼리
    오블완
    Greedy
    모델 성능 평가
    야근 지수
    API
    데이터분석
    카카오맵
    confusion matrix
    백엔드 개발자
    train_test_split
    프로그래머스
    박스플롯
    2 x n 타일링
    kakao map api
    그리디 알고리즘
    카카오맵 api
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
Programmers / [PCCP 기출문제] 2번 / 석유 시추 / python
상단으로

티스토리툴바