본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 4716 풍선

by Alan_Kim 2023. 4. 28.
728x90
반응형

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

 

4716번: 풍선

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 팀의 수 N(1 ≤ N ≤ 1,000)과 방 A와 B에 보관되어있는 풍선의 수 A, B가 주어진다. (0 ≤ A, B ≤ 10,000)  다음 N개

www.acmicpc.net

 

문제 해결

  • 거리를 비교해서 A아니면 B를 선택하는 문제로 보면 된다.
  • A와 B와 거리가 같으면 풍선 남는 쪽으로 가면 되는데 풍선이 모자랄 일이 없으므로 그냥 계산하면 된다.

 

CODE

while True:
    n, a, b = map(int, input().split())
    if n==0 and a==0 and b==0:break
    X = [list(map(int, input().split())) for _ in range(n)]
    X.sort(key=lambda x: abs(x[1]-x[2]), reverse = True)
    answer = 0
    E = []
    for ballon, distanceA, distanceB in X:
        if distanceA > distanceB:
            if b>= ballon:
                b-= ballon
                answer += distanceB*ballon
            else:
                ballon -=b
                answer += distanceB*b
                answer += distanceA * ballon
                b= 0
        elif distanceA < distanceB:
            if a>= ballon:
                a -= ballon
                answer += distanceA*ballon
            else:
                ballon -= a
                answer += distanceA*a
                answer += distanceB*ballon
                a=0
        else:
            E.append([ballon, distanceA,distanceB])
    for i in range(len(E)):
        answer += E[i][0]*E[i][1]
    print(answer)
728x90
반응형

댓글