안경잡이 구루루

백준 25304 (영수증) [C programming] [VS/Visual Studio] 본문

C언어(C programming)/문제풀이(백준,BaekJoon)

백준 25304 (영수증) [C programming] [VS/Visual Studio]

구루루(gururu) 2023. 11. 5. 13:53
반응형

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

 

25304번: 영수증

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

www.acmicpc.net

 


나:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int sum, n, i, totall =0;
	int a[1000000], b[10];
	scanf("%d", &sum);
	scanf("%d", &n);
	for (i = 0; i < n; i++) {
		scanf("%d %d", &a[i], &b[i]);
		totall += a[i] * b[i];
	}
	if (totall == sum) {
		printf("%s", "Yes");
	}
	else { printf("%s", "No"); }
	return 0;
}

왼성된 코드는 위와 같다.

 

우선 VS 에서 scanf() 오류를 막기 위해 #define _CRT_SECURE_NO_WARNINGS 선언.

 

(1)
long int sum, n, i, totall =0;
long int a[1000000], b[10];
scanf("%d", &sum);
scanf("%d", &n);

영수증에 적힌 총 금액 변수 sum , 물건 종류의 수에 해당하는 변수 n, 반복문의 종결조건에 사용되는 변수 i,

 

구매한  물건들의 목록으로 계산한 총 금액인 변수 totall1000000개 이하로 제한한 변수 a 

 

, 10개 이하로 제한한 변수b 를  차례로 선언해 준다.

 

이후에 첫째 줄과 둘째 줄에 순서대로 scanf() 함수를 이용해 총 금액 sum과 물건종류의 수인 n 을 정수형 %d 으로 입력받는다. 

 

(2)
for (i = 0; i < n; i++) {
    scanf("%d %d", &a[i], &b[i]);
    totall += a[i] * b[i];
}
if (totall == sum) {
    printf("%s", "Yes");
}
else { printf("%s", "No"); }

n 번 만큼 반복문 for 을 이용해 반복을 진행하며 그때마다 배열 순서대로 각 물건의 가격 a[i] 과 개수 b[i] 가 공백을 사이에 두고 입력받는다.

 

그리고 입력받을 때 마다 a 와 b 사이 계산한 결과값을 totall 변수에 계속 더해준다.

 

최종적으로 계산한 결과값인 totall 과 첫번 째 줄에 입력받은 영수증에 적힌 총 금액인 sum 과 같다면 Yes, 아니면 No 를 if 조건문을 이용해 출력시킨다.

 


다른사람:

#include <stdio.h>

int main() {
	int a, b, tot = 0;
	scanf("%d\n%d", &a, &b);
	for (int i = 0; i < b; i++) {
		int p, c;
		scanf("%d %d", &p, &c);
		tot += (p * c);
	}
	if (tot == a) printf("Yes");
	else printf("No");
}

완성된 코드는 위와 같다.

 

주목할 점은 배열을 사용하지 않은 것이다. 나처럼 구지 배열을 1000000개나 사용할 필요 없이 어짜피 계산에 사용된 변수의 경우 다시 사용하지 않기 때문에 저장할 필요가 없어 배열에 저장할 필요없이 반복문이 한번 돌때마다 기존에 변수에 다시 새로운 물건의 가격과 개수를 입력받으면 된다.

반응형