자기계발
백준
25304 · 영수증

백준 25304번 영수증

문제

영수증에 적힌 총 금액 X(첫째 줄)와 구매한 물건의 종류 수 N(둘째 줄, 100 이하)이 주어진다. 이어서 N개의 줄에 각 물건의 가격 a와 개수 b가 공백으로 구분되어 주어진다. 가격 × 개수의 합이 X와 같으면 Yes, 다르면 No를 출력한다.

풀이

N개의 변수를 만들어야 한다고 생각해서 이 부분에서 막혔다. 이전에 비슷한 로직에서 썼던 globals()로 변수를 만들어 보았지만, 입력을 두 개씩 받는 탓인지 값을 불러올 때 KeyError가 났다.

그래서 가격과 개수를 담는 클래스를 만들고, 입력마다 객체를 만들어 전역 이름 stuff_1, stuff_2 같은 이름으로 저장했다. 이후 전역 이름 중 stuff가 들어간 것을 돌며 가격 * 개수를 더해 총액과 비교한다.

class var:
    def __init__(self, price, cnt):
        self.price = price
        self.cnt = cnt
 
total = int(input())
total_cnt = int(input())
 
def val_price():
    
    for i in range(1, total_cnt+1):
        p, c = map(int, input().split())
        globals()[f'stuff_{i}'] = var(p, c)
 
    val_total = 0
 
    for g in globals():
        if 'stuff' in g:
            val_total += globals()[g].price * globals()[g].cnt
 
    if val_total != total:
        return print('No')
    else:
        return print('Yes')
    
val_price()

짚고 갈 점

  • 이 문제는 객체를 따로 보관할 필요 없이 한 줄씩 읽으면서 가격 * 개수를 바로 합계에 더해도 풀린다.
  • 클래스에 대한 이론은 아직 부족해서, 개념을 정리해 두면 로직을 짤 때 선택지가 늘어날 것 같다.

출처