백준/브론즈 탈출하기

[Java] 백준 25304번 영수증

정보통신 고심이 2023. 10. 13. 15:45

문제

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

영수증에 적힌,

  • 구매한 각 물건의 가격과 개수
  • 구매한 물건들의 총 금액

을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.

입력

첫째 줄에는 영수증에 적힌 총 금액 X가 주어진다.

둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.

이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.

출력

구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.

예제 입력 1 복사

260000
4
20000 5
30000 2
10000 6
5000 8

예제 출력 1 복사

Yes

영수증에 적힌 구매할 물건들의 목록으로 계산한 총 금액은 20000 × 5 + 30000 × 2 + 10000 × 6 + 5000 × 8 = 260000원이다. 이는 영수증에 적힌 총 금액인 260000원과 일치한다. 

예제 입력 2 복사

250000
4
20000 5
30000 2
10000 6
5000 8

예제 출력 2 복사

No

 

정답 코드

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int X = sc.nextInt(); // 구매한 각 물건의 가격
    int N = sc.nextInt(); // 구매한 물건의 종류 개수
    int a, b=0;
  
    int total=0; //  모든 종류의 합
    
    for(int i=0; i<N; i++){ // 물건의 종류 개수 만큼 반복
      a= sc.nextInt(); // 가격과 물건 개수를 N번 입력 받음
      b = sc.nextInt();
      total += a * b;
    }  
    
    if(X == total)
      System.out.println("Yes");
    else 
      System.out.println("No");
  }
}

 

접근 방법 

1) 처음에는 입력 받을 구매한 각 물건의 가격, 구매한 물건의 종류 개수 두 배열을 만들어서 반복문으로 저장하여 출력

-> 기초가 부족해 배열을 두개 만들어서 배열 [0]~[N-1] 까지 하나하나 입력 받아서 저장하고, 배열의 총합과 가격의 총합이 같으면 Yes/No 판정하는 방법을 고민 하던 중 

 

2) 물건의 합계로 Yes/ No 판별하니까  total 배열을 하나만 만들어도 된다는 생각

 

3) 배열이 필요한가?

필요 없다는 생각이 들었다

 

4) 그냥 총합계로 계산