코딩테스트 연습 기록

이종길·2022년 1월 10일
0

코딩테스트 연습

목록 보기
44/128

2022.01.10 20일차

백준 1246번 (온라인 판매)

문제

경래는 닭을 기르는데 올 겨울 달걀 풍년으로 함박 웃음을 짓고 있다. 그리고 이 달걀을 영양란으로 둔갑하여 옥션에 판매하려한다.

경래는 총 N개의 달걀이 있고, 그의 잠재적인 고객은 총 M명이다. 그리고 각각의 i번째 고객은 각자 달걀 하나를 Pi 가격 이하로 살 수 있다고 밝혔다.

경래는 영양란이라 속인 죄책감에 한 고객에게 두 개 이상의 달걀은 팔지 않기로 하였다. 하지만 위의 규칙 하에 수익은 최대로 올리고 싶기에 얼마로 팔지 고민하고 있다. 즉, A가격에 달걀을 판다고 하면 Pi가 A가격보다 크거나 같은 모든 고객은 달걀을 산다는 뜻이다. (물론 달걀 총 수량을 초과하여 팔 수 는 없다)

문제는 이러한 경래를 도와 최대 수익을 올릴 수 있는 달걀의 가장 낮은 가격을 책정하는 것이다.

나의 풀이

  1. 달걀 N <= 1000, 고객 M <= 1000, 적절한 가격 A
  2. i번째 고객은 Pi 가격 이하로 구매
  3. 달걀은 한개씩 판매, 최대 수익, 수익이 같을 때는 낮은 가격, 달걀 초과X
  4. 최대한 A와 Pi가 일치
  5. 고객들이 원하는 가격을 int 배열로 받기
  6. 오름차순 정렬(sort), 뒤에서부터 한개씩 카운트
  7. 배열 돌면서 max, maxIndex 구하기
import java.util.*;

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

        int N = scanner.nextInt();
        int M = scanner.nextInt();
        int[] pArr = new int[M];

        for (int i = 0; i < M; i++) {
            pArr[i] = scanner.nextInt();
        }

        Arrays.sort(pArr);

        int count = 1;
        int max = Integer.MIN_VALUE;
        int maxIndex = -1;

        for (int x = M - 1; x >= 0; x--) {
            if (N < count) break;

            int profit = pArr[x] * count;

            if (max <= profit) {
                max = profit;
                maxIndex = x;
            }
            count++;
        }

        System.out.printf("%d %d", pArr[maxIndex], max);
    }
}

생각하기

profile
Go High

0개의 댓글

관련 채용 정보