[Python] 백준 3109 빵집

2021. 10. 28. 16:57·CS/알고리즘 & 문제풀이

문제 링크 : https://www.acmicpc.net/problem/3109

 

3109번: 빵집

유명한 제빵사 김원웅은 빵집을 운영하고 있다. 원웅이의 빵집은 글로벌 재정 위기를 피해가지 못했고, 결국 심각한 재정 위기에 빠졌다. 원웅이는 지출을 줄이고자 여기저기 지출을 살펴보던

www.acmicpc.net

1. 접근 방법

좋지 않은 습관이지만, 문제 카테고리를 먼저 확인하고 접근했고, 그리디라는 카테고리만 생각하여 처음에는 잘못 접근했었다.

결론적으로, 파이프가 생성될 수 있는 시작점, 끝점을 이어가면서 해결했는데, 시작점부터 위에서, 아래로 확인을 하면 기존 파이프 때문에 새로 생성하지 못하는 경우는 없고, 이 방법으로 해결했다. 서로 겹치지 않고, 세 방향 탐색이라는 부분에서 그리디를 카테고리로 포함한 것 같은데, 그래프 탐색 문제가 더 적절하다고 생각한다.

 

 

2. 풀이 코드

🖥python 코드

import sys
input = sys.stdin.readline


def search(row: int, col: int) -> int:
    global r, c, grid
    # 범위를 벗어남
    if row < 0 or row >= r:
        return 0
    # 마지막까지 도착
    if col == c:
        return 1
    # 건물있음
    if grid[row][col] == 'x':
        return 0
    # 지나간 길 표시
    grid[row][col] = 'x'
    # 탐색
    if search(row - 1 , col + 1):
        return 1
    if search(row, col + 1):
        return 1
    if search(row + 1, col + 1):
        return 1
    return 0


r, c = map(int, input().split())

grid = [list(input().strip()) for _ in range(r)]

pipe_count = 0
for i in range(r):
    if search(i, 0):
        pipe_count += 1
print(pipe_count)

📕코드 해설

가장 위에서부터 아래로, 그리고 파이프 배치도 오른쪽-위, 오른쪽, 오른쪽-아래 순서로 탐색했다.

그러면, 연결할 수 있는 파이프는 열결 되었기 때문에 다른 파이프가 지나가지 못하고, 연결할 수 없는 파이프는 어짜피 지나가지 못하는 경로이므로, 두 경우 모두 지나가는 경로마다 모두 표시하며 진행했다.

문제를 모두 진행하면, 예제 2의 경우 다음과 같은 결과가 나온다.

검정색은 원래 건물 위치이고, 각 파이프는 모두 'x'로 표시했지만, 같은 파이프가 같은 색을 같도록 표시했다.

이 경우, 마지막 파이프만 지나가지 못하는데, 다른 경우에서 파이프가 지나가지 못하더라도 표시를 남겨두고 진행해도 된다.

함수의 리턴 값을 0/1로 한 것은, 결괏값에 바로 더하려고 했었는데, 다른 부분은 구현하고 나서 깜빡하고 적용하지 않았다.

 

 

3. 생각 정리

문제를 풀기 전 카테고리를 먼저 보는 습관을 줄여야겠다.

특정 방법으로만 생각하게 되는 부분도 있고, 생각을 덜하게 되는 것 같다.

'CS > 알고리즘 & 문제풀이' 카테고리의 다른 글

[Python] 백준 22234 가희와 은행  (0) 2021.10.28
[Python] 백준 16888 루트 게임  (0) 2021.10.28
[Python] 백준 1461 도서관  (0) 2021.10.27
[Python] 백준 20056 마법사 상어와 파이어볼  (0) 2021.10.25
[Python] 소가 길을 건나간 이유 7  (0) 2021.10.25
'CS/알고리즘 & 문제풀이' 카테고리의 다른 글
  • [Python] 백준 22234 가희와 은행
  • [Python] 백준 16888 루트 게임
  • [Python] 백준 1461 도서관
  • [Python] 백준 20056 마법사 상어와 파이어볼
mintropy
mintropy
민트로피의 하루하루 오늘보다 더 나은 내일
  • mintropy
    민트로피의 민트초코
    mintropy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 생각 정리
        • 코딩테스트
        • SSAFY
      • 디지털 노트
        • Obsidian.md
        • Notion
      • CS
        • 알고리즘 & 문제풀이
        • AI
        • DB
        • 디자인패턴
      • Projects
      • Python
        • Python Web Framework
      • JavaScript
        • React.js
      • Docker
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    SSAFY
    markdown
    django
    dfs
    fastapi
    pydantic
    Python
    project_zero
    브루트포스
    DP
    web framework
    파이썬
    코딩테스트
    프로젝트
    union-find
    그리디
    게임이론
    DRF
    카카오
    trie
    ps
    알고리즘
    line
    회고
    bfs
    구현
    Combinatorics
    조건분기
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
mintropy
[Python] 백준 3109 빵집
상단으로

티스토리툴바