BAEKJOON (Python)/Prefix Sum Algorithm

BAEKJOON_2851 "슈퍼 마리오" PYTHON

RiLLa_0511 2023. 4. 1. 15:19
728x90

[백준] 2851번 Python 파이썬

 

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

 

2851번: 슈퍼 마리오

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

www.acmicpc.net

 

< 문제 풀이 >

 

1. 10개의 정수를 입력 받아 num 리스트에 저장한다. 

2. num_sum 리스트에 num 리스트의 i+1 개의 정수 합을 각 요소로 저장한다.

3. df는 abs 함수를 이용하여 num_sum의 첫 번째 원소와 100의 차이로 초기화하고, result는 num_sum의 첫 번째 요소로 초기화한다.

4. for문을 이용하여 num_sum의 두 번째 요소부터 각 요소와 100의 차이를 계산하고, df보다 작거나 같은지 확인한다.

   if문을 사용하여 만약 같거나 작다면 df를 업데이트하고 result를 num_sum의 현재 요소로 업데이트한다.

   만약 기존의 df보다 크다면 break 문으로 종료한다.

5. result를 출력한다.

 

import sys
num = []

for i in range(10):
    num.append(int(sys.stdin.readline()))
    
num_sum = [0] * 10
num_sum[0] = num[0]

for i in range(1, 10):
    num_sum[i] = num_sum[i-1] + num[i]

df = abs(100 - num_sum[0])
result = num_sum[0]

for i in num_sum[1:]:
    if abs(100 - i) <= df:
        df = abs(100 - i)
        result = i
    else:
        break
print(result)

NameError가 뜬 이유 - result 변수를 미리 선언하지 않고, for문에서 먼저 사용하여 NameError가 발생하였다.

혼자 공부하며 올리는 블로그입니다. 틀린 내용은 댓글 남겨주시면 감사하겠습니다.