[백준] 1246 온라인 판매 Java

최희정·2022년 9월 6일
0

백준 [문자열]

목록 보기
2/2


해당 문제는 달걀을 판매할 때 최고 수익을 내는 측정 가격을 알아내는 문제다.

조건 :
1) 총 N개의 달걀과 M명의 고객이 있다.
2) i번째 고객은 달걀을 Pi 가격 이하로 살 수 있다. (즉 A 가격에 달걀을 판매하면 Pi가 A보다 크거나 같아야 구매 가능하다)
3) 한 고객당 두개 이상의 달걀 구매가 불가능하다.


문제 풀이

먼저 달걀과 고객의 수를 입력 받고 이후 고객별 Pi를 입력받아 배열에 저장한 뒤 배열을 정렬한다.

사람이 달걀 수보다 많을 경우, 두 가지의 조건이 발생하는데 달걀을 모두 판매하는 경우와 일부 판매하는 경우다.
모두 판매하는 경우 -> i가 사람-달걀+1 작으면 모두 판매 가능하므로 달걀 개수만큼 곱해주고
일부 판매하는 경우 -> 달걀을 -i한 개수만큼 곱하여 준다.

알고리즘

import java.io.*;
import java.util.*;

public class Main {
	static StringTokenizer st;

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String input = br.readLine();
		st = new StringTokenizer(input);
		int N = Integer.parseInt(st.nextToken()) ,M = Integer.parseInt(st.nextToken()), max = 0, point = 0; 
		int arr[] = new int[M], sum[] = new int[M];
		
		for(int i = 0; i < M; i++) 
			arr[i] = Integer.parseInt(br.readLine());
		Arrays.sort(arr);
		
		for (int i =0; i <M; i++) {
			if(M>N) { // 사람이 달걀 갯수보다 많을 경우
				if(i<(M-N+1)) // 달걀을 모두 판매하는 경우
					sum[i] = arr[i]*N; 
				else // 달걀 일부만 판매하는 경우
					sum[i] = arr[i]* (M-i);
			} // 달걀이 사람 수보다 많을 경우
			else
				sum[i] = arr[i] * (M-i);
		}
		
		max = sum[0];
		for(int i = 1; i < M; i++) {
			if (sum[i] > max) {
				max = sum[i];
				point = i;
			}
		}
		
		System.out.println(arr[point]+" "+max);
		br.close();
	}
}
profile
차근차근 일상을 기록하는 컴공생 👩🏻‍💻

0개의 댓글

Powered by GraphCDN, the GraphQL CDN