백준 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()짚고 갈 점
- 이 문제는 객체를 따로 보관할 필요 없이 한 줄씩 읽으면서
가격 * 개수를 바로 합계에 더해도 풀린다. - 클래스에 대한 이론은 아직 부족해서, 개념을 정리해 두면 로직을 짤 때 선택지가 늘어날 것 같다.