본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 2851 슈퍼 마리오 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 18.
728x90
반응형

BaekJoon 백준 2851 슈퍼 마리오 문제는 슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여 있고 버섯을 먹으면 점수를 받는다. 처음부터 순서대로 집으려고 한다. 버섯의 점수가 주어졌을 때, 점수의 합이 최대한 100에 가까운 점수를 구하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 2851 슈퍼 마리오 문제 정보

출처

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

알고리즘 분류

- Brute Force 브루트 포스 알고리즘

(Brute Force) 브루트포스 알고리즘 - 문자열 패턴 매칭

 

(Brute Force) 브루트포스 알고리즘 - 문자열 패턴 매칭

포스팅에서 다룰 브루트 포스 Brute Force 알고리즘은 비교 대상 문자열을 처음부터 끝까지 모두 순회하면서 비교하기 때문에 고지식한 알고리즘이라고도 불리는 문자열 패턴 매칭 알고리즘입니

wondytyahng.tistory.com

난이도

- 브론즈 1 / Bronze 1

 

슈퍼 마리오 문제 요약

  • 슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여 있다. 이 버섯을 먹으면 점수를 받는다.
  • 점수의 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.
  • 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다.
  • 마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 할 때, 마리오가 받는 점수를 출력한다.
  • 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값(102)을 선택한다.

 

문제 풀이 과정

  1. 버섯 10개의 모든 점수를 더하여 토털 점수를 구한다.
  2. 토털 점수가 100이면 100을 출력한다.
  3. 100이 아니면 버섯 10개의 점수를 역순으로 탐색한다.
  4. 누적 점수가 100보다 크면 하나 씩 토털 점수에서 뺀다.
  5. 100이면 탐색을 마친다.
  6. 100보다 작으면 바로 전의 누적 점수를 새로 저장하고 탐색을 중단한다.
  7. 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
반응형

댓글