728x90
반응형
BaekJoon 백준 2851 슈퍼 마리오 문제는 슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여 있고 버섯을 먹으면 점수를 받는다. 처음부터 순서대로 집으려고 한다. 버섯의 점수가 주어졌을 때, 점수의 합이 최대한 100에 가까운 점수를 구하는 문제이다. 난이도는 Bronze 1이다.
BaekJoon 2851 슈퍼 마리오 문제 정보
출처
- https://www.acmicpc.net/problem/2851
알고리즘 분류
- Brute Force 브루트 포스 알고리즘
(Brute Force) 브루트포스 알고리즘 - 문자열 패턴 매칭
난이도
- 브론즈 1 / Bronze 1
슈퍼 마리오 문제 요약
- 슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여 있다. 이 버섯을 먹으면 점수를 받는다.
- 점수의 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.
- 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다.
- 마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 할 때, 마리오가 받는 점수를 출력한다.
- 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값(102)을 선택한다.
문제 풀이 과정
- 버섯 10개의 모든 점수를 더하여 토털 점수를 구한다.
- 토털 점수가 100이면 100을 출력한다.
- 100이 아니면 버섯 10개의 점수를 역순으로 탐색한다.
- 누적 점수가 100보다 크면 하나 씩 토털 점수에서 뺀다.
- 100이면 탐색을 마친다.
- 100보다 작으면 바로 전의 누적 점수를 새로 저장하고 탐색을 중단한다.
- 100에 가까운 두 수를 비교하여 100에 더 가깝거나 더 큰 수를 출력한다.
코드 및 설명
- score - 100보다 작은 100에 가장 가까운 점수
- score 2 - 100보다 큰 100에 가장 가까운 점수
scores = []
for _ in range(10):
scores.append(int(input()))
score = sum(scores) # 버섯 10개의 합
if score <= 100:
print(score)
else:
score2 = 0
# 버섯 10개의 점수를 역순으로 탐색
for i in range(9, -1, -1):
# 100보다 크면 버섯의 점수를 뺀다
if score > 100:
score -= scores[i]
elif score == 100:
break
# 100보다 작으면 바로 전의 점수를 새로 저장한다.
else:
score2 = score + scores[i + 1]
break
if score == 100:
print(100)
else:
if 100 - score >= score2 - 100:
print(score2)
else:
print(score)
BaekJoon 백준 2851 슈퍼 마리오 문제를 파이썬 python으로 풀어보았다. 브루트 포스 Brute Force 알고리즘에 관한 문제로 난이도는 Bronze 브론즈 1이다.
728x90
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BaekJoon] 백준 9625 BABBA (Python / 파이썬) (0) | 2021.08.18 |
---|---|
[BaekJoon] 백준 11005 진법 변환 2 (Python / 파이썬) (0) | 2021.08.18 |
[BaekJoon] 백준 1357 뒤집힌 덧셈 (Python / 파이썬) (0) | 2021.08.17 |
[BaekJoon] 백준 9093 단어 뒤집기 (Python / 파이썬) (0) | 2021.08.17 |
[BaekJoon] 백준 11655 ROT13 (Python / 파이썬) (0) | 2021.08.17 |
댓글