백준 2851번 : 슈퍼 마리오 문제풀이 [파이썬]
<문제>
2851번 문제의 내용은 아래와 같습니다.
슈퍼 마리오
문제
슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.
슈퍼 마리오는 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다. 따라서 첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.
마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.
버섯의 점수가 주어졌을 때, 마리오가 받는 점수를 출력하는 프로그램을 작성하시오.
입력
총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.
출력
첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.
예제 입력 1 복사
10
20
30
40
50
60
70
80
90
100
예제 출력 1 복사
100
예제 입력 2 복사
1
2
3
5
8
13
21
34
55
89
예제 출력 2 복사
87
예제 입력 3 복사
40
40
40
40
40
40
40
40
40
40
예제 출력 3 복사
120
<작성한 코드>
#슈퍼 마리오
scores = []
score = 0
for _ in range (10):
scores.append(int(input()))
for i in scores:
score += i
if score >= 100:
if score - 100 > 100 - (score-i):
score -= i
break
print(score)
<코드 풀이>
본 문제는 특정 구간의 합을 반복해서 구하는 이전의 누적합 문제들과는 조금 차이가 있었고
너무너무 쉽게 풀어서 오히려 이상하다고 생각하면서 풀었다...
말그대로 그냥 쉬운 문제였다.
scores = []
score = 0
for _ in range (10):
scores.append(int(input()))
먼저 위와 같이 문제에서 주어진 입력값을 받기 위해서
코드를 작성해주었다. scores라는 이름의 배열과, 누적 점수합을 저장하기 위한 score라는 이름의 변수를
선언해주었다.
for i in scores:
score += i
if score >= 100:
if score - 100 > 100 - (score-i):
score -= i
break
이제는 scores라는 배열을 반복문을 돌면서 점수의 누적합에
점수를 계속 더해주는 방식으로 코드를 작성하였다.
반복문을 돌던 와중에 누적합이 '100'보다 크거나 같은 순간 조건문이 동작하도록 한다.
위의 코드를 살펴보면 조건문을 통해서 100에 가까운 수가 어떤것인지 판단을 하게된다.
'백준 알고리즘' 카테고리의 다른 글
백준 1182번 부분수열의 합 문제풀이, 파이썬 (0) | 2023.05.04 |
---|---|
백준 6603번 로또 문제풀이, 파이썬 (0) | 2023.05.03 |
백준 2559번 수열 문제풀이, 파이썬 (0) | 2023.04.19 |
백준 2167번 2차원 배열의 합 문제풀이, 파이썬 (0) | 2023.04.17 |
백준 1806번 부분합 문제풀이, 파이썬 (1) | 2023.04.16 |