본문 바로가기

컴퓨터/BOJ

[BOJ](Python) 2851번 : 슈퍼 마리오

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

 

2851번: 슈퍼 마리오

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

www.acmicpc.net

소스 코드는 다음과 같다.

case = []; score = 0
for _ in range(10):
    case.append(int(input()))
for i in range(10):
    score += case[i]
    if score == 100:
        print(score)
        break
    elif score > 100 or i == 9:
        if abs(score - 100) > abs(100 - sum(case[:i])):
            print(sum(case[:i]))
            break
        else:
            print(score)
            break
    else:
        pass

슈퍼마리오의 점수를 하나씩 추가시킨다.

만약에 점수가 100이 넘거나 마지막 스코어를 추가시켜야 할 때 비교를 진행해야 한다.

예를 들어,

4개의 점수로 98점을 획득했을 때 다섯 번째의 요소가 5점이라 치면 score = 103이므로 100을 넘는다. 그렇다면 103점일 때 100과 비교하면 3이 큰 것이고, 98점일 때 100과 비교하면 2점 차이 난다. 그렇다면 5점을 추가시켰다 하더라도 98점일 때 100점과의 차이가 더 적으므로 98점을 출력하고 끝낸다.

 

반대로 다섯 번 째의 요소가 3점일 때는 추가시켰을 때 100점과 비교하여 1점 차이 이기 때문에 101점을 출력하고 끝낸다.

 

이와 다르게 만약 열 번째 요소 추가했을 때도 100점이 넘지 않았을 때, abs(100-98)과 abs(98-100)은 같은 값이기 때문에 score += sum(case[:])를 출력하고 끝낸다.