쉬움 0명 해결 정답률 0%

결제 퍼사드

재고 확인과 가격 합계를 하나의 간단한 checkout 호출 뒤에 숨깁니다.

배우게 될 내용

  • 여러 하위 시스템을 호출 하나 뒤에 숨기기
  • 결제 전에 재고 확인하기
  • 같은 상품의 장바구니 줄 합치기

문제

원문 보기 (영어)

facade 패턴은 복잡한 하위 시스템으로 들어가는 간단한 진입점을 제공합니다. 상점의 checkout 호출은 두 개의 하위 시스템인 재고와 가격표를 숨깁니다.

항목은 0부터 n − 1까지 번호가 매겨집니다. stock[i]는 항목 i의 사용 가능한 수량이고 prices[i]는 그 가격입니다. 장바구니는 [item, quantity] 행들의 목록입니다. 같은 항목이 여러 행에 나타날 수 있습니다.

checkout(stock, prices, cart)는 반드시 다음을 해야 합니다:

  1. 재고를 확인합니다: 장바구니에 있는 어떤 항목이든 총 수량이 재고보다 크면 주문은 실패합니다.
  2. 그렇지 않으면 장바구니의 총 가격을 반환합니다.

checkout_facade(stock, prices, cart)를 구현하세요.

Input

stock, prices: 각각 n개의 값.

cart: [item, quantity] 행들.

Output

총 가격을 반환하거나, 어떤 항목이라도 재고가 충분하지 않으면 -1을 반환합니다.

제약 조건

1 ≤ n ≤ 1,000

0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ 장바구니 줄 수 ≤ 1,000; 1 ≤ quantity ≤ 1,000

예시

예시 1
입력:
cart = [
    [0, 2],
    [2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]

예상 출력:
expected = 10
입력:
std::vector<std::vector<long long>> cart = {
    {0, 2},
    {2, 4}
};
std::vector<long long> stock = {5, 2, 10};
std::vector<long long> prices = {3, 20, 1};

예상 출력:
long long expected = 10;
입력:
long[][] cart = new long[][] {
    new long[] {0, 2},
    new long[] {2, 4}
};
long[] stock = new long[] {5, 2, 10};
long[] prices = new long[] {3, 20, 1};

예상 출력:
long expected = 10;

설명

두 항목 모두 재고가 있습니다. 2 × 3 + 4 × 1 = 10.

예시 2
입력:
cart = [
    [1, 1],
    [1, 2]
]
stock = [5, 2]
prices = [3, 20]

예상 출력:
expected = -1
입력:
std::vector<std::vector<long long>> cart = {
    {1, 1},
    {1, 2}
};
std::vector<long long> stock = {5, 2};
std::vector<long long> prices = {3, 20};

예상 출력:
long long expected = -1;
입력:
long[][] cart = new long[][] {
    new long[] {1, 1},
    new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};

예상 출력:
long expected = -1;

설명

item 1이 두 번 등장해 총 3개가 되었지만 재고는 2개뿐이므로 주문은 실패합니다: -1.

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

먼저 모든 장바구니 줄에서 상품별 수량을 합하세요.

힌트 2

가격을 계산하기 전에 그 합계를 재고와 비교하세요.

힌트 3

부족한 상품이 하나라도 있으면 바로 -1을 반환하세요.

예상 복잡도

시간 O(n + 장바구니 줄 수), 추가 공간 O(n)

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.