해당 문제를 풀다가 Visual Studio에서는 다음과 같은 오류가 뜨고, 신기하게 백준에서는 정답 처리가 된 경우가 있었다.
오류(활성) E0028 식에 상수 값이 있어야 합니다. BaekJoon C:\CPP\Study_alone\BaekJoon\BaekJoon.cpp 9
내가 작성한 코드는 다음과 같다.
#include <iostream>
using namespace std;
int main() {
int all, x; int a, b; int sum = 0;
cin >> all;
cin >> x;
int y[x];
for (int i = 0; i < x; i++) {
cin >> a >> b;
y[i] = a * b;
}
for (int i = 0; i < x; i++) {
sum = sum + y[i];
}
if (sum == all) { cout << "Yes" << endl; }
else { cout << "No" << endl; }
return 0;
}
백준에서 질문글을 달았는데 친절하신 고수님이 다음과 같은 답변을 주셨다.
즉, 수정해서 다시 코드를 입력하면 다음과 같다.
#include <iostream>
using namespace std;
int main() {
int all, x; int a, b; int sum = 0;
cin >> all;
cin >> x;
int* arr = new int[x];
for (int i = 0; i < x; i++) {
cin >> a >> b;
arr[i] = a * b;
}
for (int i = 0; i < x; i++) {
sum = sum + arr[i];
}
if (sum == all) { cout << "Yes" << endl; }
else { cout << "No" << endl; }
delete[] arr;
return 0;
}
배열
동적할당(new / delete의 사용)
(+추가 23.02.24/ 유사 문제 백준 15552번: 빠른 A+B)
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int t; int a, b;
cin >> t;
int* arr = new int[t]; // 동적 할당 new를 사용해서 풀 수 있었다.
for (int i = 0; i < t; i++) {
cin >> a >> b;
arr[i] = a + b;
}
for (int i = 0; i < t; i++) {
cout << arr[i] << "\n";
}
delete[] arr; // new는 delete와 함께 다니기
return 0;
}