백준 C++ 25304

김민원·2024년 9월 22일

문제
첫째 줄 값으로 총금액 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문을 헷갈리지 말아야겠다.

profile
개발하는 척

0개의 댓글