-
[Python] 25304번 : 영수증Coding Test/백준 2025. 2. 6. 22:15
영수증
시간 제한메모리 제한제출정답맞힌 사람정답 비율1 초 1024 MB 167460 92086 80930 55.483% 문제
준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
영수증에 적힌,
- 구매한 각 물건의 가격과 개수
- 구매한 물건들의 총 금액
을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
입력
첫째 줄에는 영수증에 적힌 총 금액 X 가 주어진다.
둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N 이 주어진다.
이후 N 개의 줄에는 각 물건의 가격 a 와 개수 b 가 공백을 사이에 두고 주어진다.
출력
구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.
제한
- 1≤X≤1000000000
- 1≤N≤100
- 1≤a≤1000000
- 1≤b≤10
예제 입력 1 복사
260000 4 20000 5 30000 2 10000 6 5000 8
예제 출력 1 복사
Yes
영수증에 적힌 구매할 물건들의 목록으로 계산한 총 금액은 20000 × 5 + 30000 × 2 + 10000 × 6 + 5000 × 8 = 260000원이다. 이는 영수증에 적힌 총 금액인 260000원과 일치한다.
예제 입력 2 복사
250000 4 20000 5 30000 2 10000 6 5000 8
예제 출력 2 복사
No
첫번째 코드
total = 0 #전체 가격 입력 TotalPrice = int(input()) #물건의 종류의 수 입력 CountStuff = int(input()) #물건의 종류의 수 만큼 가격 개수 입력 for i in range(CountStuff): Price, Count = map(int, input().split()) total = Price * Count + total #영수증 가격과, 실제 가격이 같으면 yes 아니면 no if TotalPrice == total: print('Yes') else: print('No')
첫번째 시도는..
맞았다.
GPT 한테 더 효율적인 코드가 있는지 물어봤다.
GPT 의 정답
# 영수증에 적힌 총 금액 입력 total_price = int(input()) # 구매한 물건의 종류 수 입력 num_items = int(input()) # 실제 계산된 총 금액 calculated_total = sum(int(a) * int(b) for a, b in (input().split() for _ in range(num_items))) # 결과 비교 및 출력 print("Yes" if total_price == calculated_total else "No")
개선 내용
1. sum()을 사용하여 간결하게 총합 계산
- 기존 코드에서는 for 루프에서 매번 total 값을 업데이트했지만, sum()을 사용하면 한 줄로 처리 가능.
- 리스트 컴프리헨션과 제너레이터 표현식을 활용해 깔끔하게 연산 수행.
2. total_price와 calculated_total 비교 연산을 더 직관적으로 표현
- print("Yes" if total_price == calculated_total else "No")
- 기존 if-else 구조보다 한 줄로 표현하여 가독성 향상.
'Coding Test > 백준' 카테고리의 다른 글
[Python] 10818번: 최소, 최대 (최솟값, 최댓값 구하기) (0) 2025.02.11 [Python] 25314번 : 코딩은 체육과목 입니다 (0) 2025.02.09 [Python] 2480번: 주사위 세개 (1) 2025.01.26 [Python] 11654번: 아스키 코드 (0) 2024.12.16 [Python] 2738번: 행렬 덧셈 (2) 2024.12.16