[PYTHON/파이썬] 2851 슈퍼 마리오 - 다중조건 내림차순

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

     

    2851번: 슈퍼 마리오

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

    www.acmicpc.net

    문제 풀이

    • 중간에 버섯을 중단한다면, 그 이후의 버섯은 모두 먹을 수 없다.
      • => 뒤에서부터 하나씩 빼고 더한다.
      • => 첫번째 버섯부터 열번째 버섯, 첫번째 버섯부터 아홉번째 버섯 ...
    • 딕셔너리 key로 부분합을 value값으로 100 차이값의 절대값을 저장한다.
    • 점수의 합은 최대한 100과 가깝고 동일한 차이값을 가진다면 더 큰 점수가 출력된다.
      • => 1. 차이값을 오름차순으로 정렬하고, 2.부분합은 내림차순으로 정렬하여 첫번째 key값을 반환한다.

    soltuion - 성공

    import sys
    score = [int(sys.stdin.readline()) for _ in range(10)]
    result = {}
    for i in range(10,-1,-1):
        score_sum = sum(score[:i])
        result[score_sum] = abs(100 -score_sum)
    sort_result = sorted(result.items(), key = lambda x:(x[1],-x[0]) ) 
    print(sort_result[0][0])

    새롭게 알게 된 점.

    sort_result = sorted(result.items(), key = lambda x:(x[1],-x[0]) )

    • 람다 함수를 활용해 다중 조건을 정렬할때
    • 조건값에 음수를 붙이면 내림차순이다.

     

    댓글