문제
첫째 줄 값으로 총금액 X를 받고 둘째 줄에는 물건 종류 수 N을 받고 그렇게 N개의 줄에 가격 a와 개수 b가 공백을 사이에 두고 주어진다. 출력으로 X와 총 금액이 일치하면 Yes 아니면 No를 출력하면 된다.
#include <iostream> //입출력 라이브러리
int main() { //프로그램 시작
return 0; //종료
}
#include <iostream> //입출력 라이브러리
int main() { //프로그램 시작
int X, N, a, b; //총금액과 물건 종류 수 정수 변수
int sum=0;
std::cin >> X; //총금액 입력
std::cin >> N; //물건 종류 수
for(int i = 0; i = N; i++) //물건 종류 수 만큼 반복
{
std::cin >> a >> b; //공백으로 구분된 값 받기
sum += a*b; //값 곱해서 합하기
}
if(X == sum)
{
std::cout << "Yes" <<std::endl;
}
else
{
std::cout << "No" <<std::endl;
}
return 0; //종료
}
위 코드로 제출하니 시간초과로 실패했다. 정답 코드를 확인해보겠다.
#include <iostream>
using namespace std;
int main() {
int x, t, a, b;
cin >> x;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> a >> b;
x -= a * b;
}
if (x == 0) cout << "Yes";
else cout << "No";
return 0;
}
우선 namespace로 std선언에서 차이가 있다. for문에서 반복의 조건으로 N과 일치하면 이라고 값을 적었는데 이 부분이 틀렸다. 조건 일시 반복문을 수행하고 변화를 준다는 것을 착각했다. 결과 값과 x를 비교하는 방식이 총 합으로 값이 같은지 확인하는게 아니라 x에 a*b의 합을 뺀값이 0이면 Yes가 출력되게 하는 방식이다. 사실 이 부분에서의 차이는 큰 영향은 없었을 거 같고 for문을 다시 수정해봐야겠다.
#include <iostream> //입출력 라이브러리
int main() { //프로그램 시작
int X, N, a, b; //총금액과 물건 종류 수 정수 변수
int sum=0;
std::cin >> X; //총금액 입력
std::cin >> N; //물건 종류 수
for(int i = 0; i < N; i++) //물건 종류 수 만큼 반복
{
std::cin >> a >> b; //공백으로 구분된 값 받기
sum += a*b; //값 곱해서 합하기
}
if(X == sum)
{
std::cout << "Yes" <<std::endl;
}
else
{
std::cout << "No" <<std::endl;
}
return 0; //종료
}
이 코드도 결국 성공했다. 앞으로 for문을 헷갈리지 말아야겠다.