프로그래밍/코딩 테스트 연습

[백준] 25304번 : 영수증 (3단계) (C++)

w_w 2024. 1. 9. 09:32

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

 

25304번: 영수증

준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것

www.acmicpc.net

 

 


 

문제

 

 

 

해석

 

물건 여러 개를 입력받아 최종적인 값을 구한 후 처음 입력한 값과 일치하면 Yes 일치하지 않으면 No를 출력합니다.

 

총금액을 구하려면 물건 수만큼 반복시키는 반복문이 필요하고 물건 값을 비교하는 조건문을 사용해야 해 if문으로 출력해야 합니다.

 

물건의 종류가 매우 많다면, 반복문은 시간복잡도가 상수가 아니기 때문에 주어진 값을 바로바로 계산하고 그때마다 변수에 더하해야 하지만, 물건의 종류가 100개 이하이기 때문에 반복문을 사용해도 문제가 없음을 확인할 수 있습니다.

 

 

 

 

 

풀이

 

첫 줄에 주어지는 금액은 마지막 if문으로 처리하면 Yes, No를 출력하는 코드를 작성할 수 있습니다.

 

if (sum == X)
    cout << "Yes";
else
    cout << "No";

 

물건의 종류는 반복 횟수를 알려주기 때문에 이를 이용해 다음과 같이 반복문을 쓸 수 있고 sum 변수를 통해 총금액 합을 구합니다.

 

int sum=0;

for (int i = 0; i < N; i++) {
    cin >> a >> b;
    sum += a * b;
}

 

sum을 0으로 초기화하지 않는 다면 쓰레기 값이 같이 더해집니다.

 

최종적인 코드는 다음과 같습니다.

 

#include<iostream>
using namespace std;

int main() {
	int X, N, a, b, sum=0;
	cin >> X >> N;
	for (int i = 0; i < N; i++) {
		cin >> a >> b;
		sum += a * b;
	}
	if (sum == X)
		cout << "Yes";
	else
		cout << "No";
}

 

 


 

정리

 

이 문제는 앞에서 푼 반복문 문제의 논리를 사용한 문제입니다.

 

1. 횟수를 입력받고 반복시키는 코드

https://whitecode2718.tistory.com/66

 

[백준] 10950번 : A+B - 3 (3단계) (C++)

https://www.acmicpc.net/problem/10950 10950번: A+B - 3 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 해석 테스트 케이스를 만드는 방법을 연습하는 문제입니다.

whitecode2718.tistory.com

 

 

2. 합 알고리즘

https://whitecode2718.tistory.com/67

 

[백준] 8393번 : 합 (3단계) (C++)

https://www.acmicpc.net/problem/8393 8393번: 합 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 해석 반복문을 학습하면 가장 먼저 접하는 1부터 n까지의 합을 구하는

whitecode2718.tistory.com