[파이썬/python] 백준 - 28069 김밥천국의 계단

2025. 8. 2. 15:10·알고리즘
반응형

문제

https://www.acmicpc.net/problem/28069


문제 설명

  1. 문 앞에 무한히 많은 계단이 있다.
    1. 가장 아래 계단의 번호는 0번이며, 위로 올라가면서 순서대로 번호가 붙는다.
    2. 그 중 N번째 계단에 도달해야 한다.
  2. 민희는 매번 2가지 행동 중 하나를 선택해서 총 K번 행동할 수 있다. 정확히 K번째 행동에서 N번째 계단에 도달해야 한다.
    1. 계단을 한 칸 올라간다.
    2. 지팡이를 두드려 $i + \lfloor i/2 \rfloor$ 번째 계단으로 순간이동한다.
  3. 민희는 0번째 계단에 있을 때, N번째 계단에 도달할 수 있는지 구한다.

 


풀이

민희는 0번째 계단부터 순차적으로 계단을 오른다. 따라서 이전 값을 재사용하는 DP 알고리즘이 떠올랐지만, BFS가 더 구현이 쉬울 것 같아 BFS를 사용했다.

보통 1차원이면 BFS를 잘 떠올리기 힘들다. 하지만 몇몇 문제들이 1차원 BFS로 나오니 이 부분을 좀 더 유의하고 있으면 좋을 것 같다고 생각했다.

  1. queue에 최초의 위치 0과 횟수 0을 초기화한다.
  2. i+1, i + i //2 위치를 탐색하면서 BFS를 진행한다.
    1. 만약 횟수가 K를 넘었다면 해당 위치에서는 탐색을 종료한다.
    2. N에 도달했다면 결과를 반환한다.

코드

import sys
from collections import deque
input = sys.stdin.readline
MAX_SIZE = 10**6
n,k = map(int,input().split())

def bfs():
    queue = deque([(0,0)])
    visited = [0 for _ in range(n+1)]
    visited[0] = 1

    while queue:
        i,cnt = queue.popleft()
        if i == n:
            return "minigimbob"
        if cnt == k:
            continue
        for ni in [i+1,i+(i//2)]:
            if ni > n or visited[ni]:
                continue
            queue.append((ni, cnt+1))
            visited[ni] = 1
    return "water"

print(bfs())

시간복잡도

  • 최악의 경우는 모든 노드의 위치를 탐색하는 경우이다. 즉 $N*2(간선의 개수)$정도의 연산이 필요하다.
  • $N = 10^6$이므로 약 $O(10^6)$의 시간복잡도를 가진다.
반응형

'알고리즘' 카테고리의 다른 글

[파이썬/python] 백준 - 1235 학생 번호  (1) 2025.08.04
[파이썬/python] 백준 - 17141 연구소 2  (3) 2025.08.03
[파이썬/python] 백준 - 17124 두 개의 배열  (3) 2025.08.01
[파이썬/python] 백준 - 13901 로봇  (4) 2025.07.31
[파이썬/python] 백준 - 2904 수학은 너무 쉬워  (3) 2025.07.30
'알고리즘' 카테고리의 다른 글
  • [파이썬/python] 백준 - 1235 학생 번호
  • [파이썬/python] 백준 - 17141 연구소 2
  • [파이썬/python] 백준 - 17124 두 개의 배열
  • [파이썬/python] 백준 - 13901 로봇
개골개굴
개골개굴
굶고 코딩하기
  • 개골개굴
    밥스토리
    개골개굴
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (162) N
      • SW 마에스트로 (0)
      • 알고리즘 (125) N
      • CS (13)
      • Java (6) N
      • 자기개발 (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Redis
    java
    JPA
    작심삼일 챌린지
    completablefuture
    springboot
    알고리즘
    컴퓨터 구조
    인프런
    컴퓨터구조
    async
    백준
    python
    SMTP
    OS
    파이썬
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
개골개굴
[파이썬/python] 백준 - 28069 김밥천국의 계단
상단으로

티스토리툴바