[Python] 백준/BOJ 24499번: blobyum (Silver 4)

2025. 6. 20. 21:43·Algorithm/백준 (BOJ)
반응형

💻 Problem

문제 보러 가기

 

오늘도 블롭은 배고프다. 그래서 블롭은 요리사 연우를 찾아가 맛있는 것을 달라고 부탁했다.

연우는 귀여운 블롭에게 이왕이면 맛있는 음식을 해 주고 싶었기에, 자신이 만드는 데에 가장 뛰어난 애플파이를 만들기로 하였다. 연우는 N개의 애플파이를 만들었으며, 이를 원 모양으로 책상에 배치해 놓았다.

각 애플파이는 하나의 양의 정수로 표현되며, 이는 맛있는 정도를 의미한다. (수가 클수록 더 맛있는 애플파이이다.)

블롭은 N개의 애플파이 중 K개를 먹으려고 한다. 물론 블롭은 힘을 들이지 않고 먹고 싶기 때문에, 연속으로 배치되어 있는 K개의 애플파이를 먹으려 한다.

블롭을 도와서 블롭이 먹을 애플파이의 맛의 합의 최댓값을 구해 주자!

 

✏️ Solution 1

import sys
input = sys.stdin.readline

N, K = map(int, input().split()) # 애플파이의 개수, 먹으려는 애플파이의 개수
A = list(map(int, input().split())) # 애플파이의 맛있는 정도
pie = [0] # 애플파이의 맛있는 정도 누적합
ans = 0 # 먹을 애플파이의 맛의 합의 최댓값

# 누적합 구하기
for i in range(N):
    pie.append(pie[i] + A[i])

# 애플파의 맛의 합의 최댓값 구하기
for i in range(N):
    if i + K <= N:
        total = pie[i + K] - pie[i]
    else:
        total = pie[N] - pie[i] + pie[i + K - N]
    ans = max(ans, total)

print(ans)

최근에 누적합 문제를 풀었어서 자연스럽게 누적합을 떠올려서 풀게 됐다.

i + K > N 일 때, 어떻게 계산해야 할지 좀 머리 아팠다...

직접 대입해 보면서 K가 2일 때, K가 3일 때.. 계산해 보니 pie[N] - pie[i] + pie[i + K - N]이 나왔다.

 

✏️ Solution 2

import sys
input = sys.stdin.readline

N, K = map(int, input().split()) # 애플파이의 개수, 먹으려는 애플파이의 개수
A = list(map(int, input().split())) # 애플파이의 맛있는 정도
A += A # 원형 처리

pie = [0] # 애플파이의 맛있는 정도 누적합
ans = 0 # 먹을 애플파이의 맛의 합의 최댓값

# 누적합 구하기
for i in range(N * 2):
    pie.append(pie[i] + A[i])

# 애플파의 맛의 합의 최댓값 구하기
for i in range(N):
    ans = max(ans, pie[i + K] - pie[i])

print(ans)

아 맞다!!!!!!!! 머리 아프게 계산할 필요 없이 그냥 똑같은 배열 이어 붙이면 원형 처리 됐었지..

전에 무슨 반지 문제에서 이렇게 풀었던 거 같은데 까먹고 있었음 ㅠ;;

뭔가 당한 느낌! 기억해야겠다

 

✏️ Solution 3

import sys
input = sys.stdin.readline

N, K = map(int, input().split()) # 애플파이의 개수, 먹으려는 애플파이의 개수
A = list(map(int, input().split())) # 애플파이의 맛있는 정도
A += A # 원형 처리

current = sum(A[:K])
ans = 0 # 먹을 애플파이의 맛의 합의 최댓값

# 애플파의 맛의 합의 최댓값 구하기
for i in range(K, N + K):
    # 현재 범위의 다음 값 더하고 이전 값 빼기
    current += A[i] - A[i - K]
    ans = max(ans, current)

print(ans)

생각해보니 누적합 구할 필요도 없네..

슬라이딩 윈도우로 푸는 게 더 간단한데...!

최근에 누적합 문제 풀어서 누적합에만 꽂힌 상태로 본 것 같다.

 

시간복잡도는 전부 O(N)이지만 당연히 슬라이딩 윈도우로 푸는 게 조금 더 빠르다

반응형

'Algorithm > 백준 (BOJ)' 카테고리의 다른 글

[Python] 백준/BOJ 3197번: 백조의 호수 (Platinum 5)  (0) 2025.07.03
[Python] 백준/BOJ 1655번: 가운데를 말해요 (Gold 2)  (0) 2025.06.28
[Python] 백준/BOJ 28135번: Since 1973 (Bronze 3)  (0) 2025.06.15
[Python] 백준/BOJ 5549번: 행성 탐사 (Gold 5)  (0) 2025.06.12
'Algorithm/백준 (BOJ)' 카테고리의 다른 글
  • [Python] 백준/BOJ 3197번: 백조의 호수 (Platinum 5)
  • [Python] 백준/BOJ 1655번: 가운데를 말해요 (Gold 2)
  • [Python] 백준/BOJ 28135번: Since 1973 (Bronze 3)
  • [Python] 백준/BOJ 5549번: 행성 탐사 (Gold 5)
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (196) N
      • SSAFY (10)
      • Algorithm (114) N
        • 이론 (6)
        • 백준 (BOJ) (107) N
        • 프로그래머스 (1)
      • Trouble Shooting (9)
      • Frontend (6)
      • React (17)
      • Next.js (4)
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (9)
        • JavaScript (0)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    dfs
    bfs
    순열
    알고리즘
    우선순위큐
    SSAFYcial
    구현
    DP
    Next.js
    브루트포스
    백준
    Error
    백트래킹
    힙
    재귀
    티스토리챌린지
    강의
    싸피
    React
    html5
    Java
    Algorithm
    Heap
    블록체인
    중복조합
    중복순열
    파이썬
    SSAFY
    오블완
    수학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[Python] 백준/BOJ 24499번: blobyum (Silver 4)
상단으로

티스토리툴바