청야에몽
청야의 개발 일기
청야에몽
전체 방문자
오늘
어제
  • 분류 전체보기 (156)
    • os (4)
      • Linux (4)
    • Language (32)
      • Python (15)
      • C# (6)
      • Java (11)
    • BaekJoon (92)
      • 단계별로 풀어보기 (81)
      • 누적합 (11)
    • Test (6)
      • 코딩테스트 (6)
      • 42 SEOUL (0)
    • Project (9)
      • 충돌, 피하기 게임 (8)
      • Unreal engine5 CICD 구축 (1)
    • Git & GitHUB (9)
    • Cloud (3)
      • AWS (0)
      • Azure (0)
      • Docker (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • for문
  • 연산자
  • 누적합
  • Reset
  • git
  • 누적 합
  • Rebase
  • 리눅스
  • java
  • Python
  • 재귀 함수
  • 백준
  • 파이썬
  • Revert
  • c#
  • docker
  • 자료형
  • pygame
  • 중첩for문
  • Linux

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
청야에몽

청야의 개발 일기

BaekJoon/누적합

[백준] 슈퍼 마리오 - 2851번 문제 (Python)

2023. 3. 20. 17:42
728x90

https://www.acmicpc.net/status?user_id=chch4569&problem_id=2851&from_mine=1 

 

채점 현황

 

www.acmicpc.net


문제

슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.

슈퍼 마리오는 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다. 따라서 첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.

마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.

버섯의 점수가 주어졌을 때, 마리오가 받는 점수를 출력하는 프로그램을 작성하시오.

입력

총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.

출력

첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.

코드 정답

import sys
input = sys.stdin.readline

# 2851번
cnt, ans = 0, 0
arr = []
for _ in range(10):
    arr.append(int(input()))

while cnt <= 9:
    ans += arr[cnt]

    if (ans == 100):
        break
    elif (ans > 100):
        if ans - 100 <= 100 - (ans - arr[cnt]):
            break
        else:
            ans -= arr[cnt]
            break
    cnt += 1

print(ans)

풀이

1~2행 : input() 을 사용하면 느리기 때문에 sys.stdin.readline 을 사용하기 위해 sys 를 import 시켜준 후 input 에 sys.stdin.readline 을 넣어줍니다.

import sys
input = sys.stdin.readline

4~8행 : cnt, ans 값을 0으로 선언과 동시에 초기화해주고 arr 를 배열로 선언합니다. 이후 10번을 반복하면서 정수값을 입력받아 arr 에 순차적으로 대입합니다.

# 2851번
cnt, ans = 0, 0
arr = []
for _ in range(10):
    arr.append(int(input()))

10~23행 : cnt 가 9 이하라면 반복됩니다. ans = ans + arr[cnt] 와 같은 말로 ans 와 arr[cnt]에 들어있는 값을 더하여 ans 에 대입합니다.

첫번째 조건(if)으로는 ans 가 100 이라면 while 문에서 빠져나와 ans 값을 출력을 하게 됩니다.

두번째 조건(elif)으로는 ans 가 100보다 크다면 중첩 조건문으로 들어가게 됩니다. 만약 ans-100을 한 값이 100 - (ans - arr[cnt]) 보다 작거나 같다면 while 문을 빠져나와 ans 를 출력합니다. 아니라면 ans = ans - arr[cnt] 와 같은 말로 ans 에서 arr[cnt]에 해당하는 값을 빼낸 후 whiel 문을 빠져나와 ans 를 출력합니다.

while cnt <= 9:
    ans += arr[cnt]

    if (ans == 100):
        break
    elif (ans > 100):
        if ans - 100 <= 100 - (ans - arr[cnt]):
            break
        else:
            ans -= arr[cnt]
            break
    cnt += 1

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

'BaekJoon > 누적합' 카테고리의 다른 글

[백준] 2차원 배열의 합 - 2167번 문제 (Python)  (0) 2023.03.23
[백준] 기상청 인턴 신현수 - 2435번 문제 (Python)  (0) 2023.03.21
[백준] 구간 합 구하기 5 - 11660번 (Python)  (0) 2023.03.19
[백준] 수열 - 2559번 (Python)  (0) 2023.03.18
[백준] 구간 합 구하기 4 - 11659번 (Python)  (2) 2023.03.17
    'BaekJoon/누적합' 카테고리의 다른 글
    • [백준] 2차원 배열의 합 - 2167번 문제 (Python)
    • [백준] 기상청 인턴 신현수 - 2435번 문제 (Python)
    • [백준] 구간 합 구하기 5 - 11660번 (Python)
    • [백준] 수열 - 2559번 (Python)
    청야에몽
    청야에몽
    개인적으로 학습을 하여 까먹지 않기 위해 올리는 블로그입니다.

    티스토리툴바