알고리즘 문제풀이/Beakjoon

백준 2783. 삼각 김밥 (JAVA)

joah.k 2023. 2. 22. 17:37
728x90

https://www.acmicpc.net/problem/2783

 

2783번: 삼각 김밥

첫째 줄에 세븐25의 삼각 김밥 가격 정보 X와 Y가 주어진다. (Y그램 당 X원) (1 ≤ X ≤ 100, 1 ≤ Y ≤ 1,000) 둘째 줄에는 세븐25를 제외한 편의점의 개수 N이 주어진다. (1 ≤ N ≤ 100) 다음 N개의 줄에는 i

www.acmicpc.net

 

삼각 김밥 

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 4472 2821 2638 65.120%

문제

유명 편의점 체인점 세븐25는 삼각 김밥을 전국에서 가장 싸게 판매하고 있다. 

이 회사의 직원들은 삼각 김밥의 가격을 전국 최저가를 유지하기 위해 매일 근처의 편의점을 방문한다. 그리고 나서 세븐25의 삼각 김밥보다 싼 가격을 발견하면, 삼각 김밥의 가격을 그 가격으로 바꿔 최저가를 유지한다.

매일 아침, 점심, 저녁으로 삼각 김밥을 먹는 상근이와 정인이는 정말 세븐25가 제일 싼지 궁금해졌다. 

이들은 학교 근처에 있는 세븐 25와 세븐 25를 제외한 서로 다른 N개의 편의점 체인을 방문 할 것이다. 이 편의점을 방문하면서 세븐25보다 싼 삼각김밥을 찾을 것이다. 또, 전체 편의점에서 가장 싼 삼각 김밥은 어디인지 찾을 것이다.

어느 편의점의 삼각 김밥이 제일 싼지 고객들이 쉽게 알지 못하기 하기 위해서, 모든 편의점은 삼각 김밥의 가격을 다음과 같이 표시한다. "삼각 김밥 Y그램 당 X원"

상근이와 정인이는 삼각 김밥을 1,000그램 살 것이다.

세븐 25의 삼각 김밥 가격과, 다른 N개 편의점의 삼각 김밥 가격이 주어졌을 때, 1,000그램의 삼각 김밥을 가장 싸게 사려면 얼마면 되는지 구하는 프로그램을 작성하시오.

삼각 김밥은 여러 군데에서 돌아가면서 사도 되고, 세븐 25와 N개 편의점 이외의 다른 곳에서는 살 수 없다.

입력

첫째 줄에 세븐25의 삼각 김밥 가격 정보 X와 Y가 주어진다. (Y그램 당 X원) (1 ≤ X ≤ 100, 1 ≤ Y ≤ 1,000)

둘째 줄에는 세븐25를 제외한 편의점의 개수 N이 주어진다. (1 ≤ N ≤ 100)

다음 N개의 줄에는 i번째 편의점의 삼각 김밥 가격 정보 Xi와 Yi가 주어진다. (Yi그램 당 Xi원) (1 ≤ Xi ≤ 100, 1 ≤ Yi ≤ 1,000)

출력

첫째 줄에 삼각 김밥 1,000그램 가격의 최저가를 출력한다. 정답과의 오차는 0.01까지 허용한다.

예제 입력 1 복사

5 100
3
4 100
3 100
7 100

예제 출력 1 복사

30.00

예제 입력 2 복사

13 6
5
56 679
35 120
99 999
56 73
37 532

예제 출력 2 복사

69.55

예제 입력 3 복사

100 5
3
99 8
65 14
78 10

예제 출력 3 복사

4642.86

 

 

 


풀이 : 결국 각 삼각김밥의 가격(y그램 당 x원)을 비교하여 최소 가격을 찾는 문제

주의 해야 할 점은 소수점까지 받는 문제이기 때문에 정수형의 자료형을 쓰면 안 된다는 것.

- double 을 써서 소수점을 받고, printf를 통해 소수점 자리 수를 조정한다. 

  e.g. double x = 0.12345;

         System.out.printf("%.2f", x);  // 0.12 

 

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

public class Main {
    // 백준 2783. 삼각 김밥
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        // 세븐 25의 삼각 김밥 (y그램 당 x원)
        double x = Integer.parseInt(st.nextToken());
        double y = Integer.parseInt(st.nextToken());
        double min = x/y; // 먼저 최소 가격에 세븐 25의 삼각 김밥 가격을 넣는다 

		// 편의점 수 n에 따른 삼각 김밥 가격 구하기 
        int n = Integer.parseInt(br.readLine());
        for(int i=0; i<n; i++){
            st = new StringTokenizer(br.readLine());

            double x1 = Integer.parseInt(st.nextToken());
            double y1 = Integer.parseInt(st.nextToken());
            double val = x1/y1;
            if(min>val) min=val;
        }
        System.out.printf("%.2f", min * 1000);
    }
}

 

 

 

728x90