[★2][백준25304번]영수증 (JAVA)

Date:     Updated:

카테고리:

태그:

[★2][백준25304번]영수증 (JAVA)

25304번 문제 ☞ https://www.acmicpc.net/problem/25304

난이도 ☞ [★2]

영수증

  • 문제
    • 준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
      영수증에 적힌,
      • 구매한 각 물건의 가격과 개수
      • 구매한 물건들의 총 금액
        을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
    • 첫째 줄에는 영수증에 적힌 총 금액 X가 주어진다.
      둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.
      이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.
    • 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.

      예제입력 예제출력
      260000
      4
      20000 5
      30000 2
      10000 6
      5000 8
      Yes
      예제입력 예제출력
      250000
      4
      20000 5
      30000 2
      10000 6
      5000 8
      No

내가 푼 풀이

이번 문제는 for문과 if문을 활용하여 구현하는 문제입니다. 우선 제일 기본적인 Scanner를 사용하여 출력하는 방법입니다.

[ 풀이 1 ]

메모리 : 17796KB
시간 : 228ms

Scanner

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);

		int total = s.nextInt();				// 총 금액
		int tAmount = s.nextInt();				// 총 수량

		for (int i = 0; i < tAmount; i++) {
			int price = s.nextInt();			// 개별 가격
			int amount = s.nextInt();			// 개별 수량

			total = total - (price * amount);
			// 입력 가격 = 총 금액 - (개별 가격 * 개별 수량)
			
		}
		if (total == 0) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}
}

다음은 BufferedReader를 활용하여 출력하는 방법입니다. 문제의 답과 제일 흡사하다고 저는 개인적으로 생각을 합니다. 왜냐면, 개별 가격과 개별 수량 사이의 공백으로 두고 주어진다고 문제에 나와있으니 제일 흡사하지 않나 싶습니다.

[ 풀이 2 ]

메모리 : 14096KB
시간 : 124ms

BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		

		int total = Integer.parseInt(br.readLine());
		int tAmount = Integer.parseInt(br.readLine());

		for (int i = 0; i < tAmount; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int price = Integer.parseInt(st.nextToken());
			int amount = Integer.parseInt(st.nextToken());

			total = total - (price * amount);
		}
		if (total == 0) {
			System.out.println("Yes");
		} else {
			System.out.println("No");
		}
	}
}

여기서도 확실히 Scanner보다는 BufferedReader가 성능이 우수하다고 보여집니다.

BKJN 카테고리 내 다른 글 보러가기

댓글 남기기