[C++] 백준/Silver/1487. 물건 팔기

2025. 3. 5. 21:26·C++/Algorithm

문제: 물건 팔기 (백준 1487번)

문제 분석

문제 개요:

주어진 데이터는 각 물건의 가격과 그에 해당하는 판매 비용들이다. 문제의 목표는 특정 기준 가격 $p$를 정할 때 최대 이익을 주는 $p$의 값을 구하는 것이다. 단, 이익이 같은 경우 더 낮은 $p$를 선택해야 한다.

접근 방법:

  1. 데이터 구조 선택:
    • 각 물건의 가격을 키로, 해당 가격에 해당하는 비용 리스트를 값으로 저장하기 위해 unordered_map<int, vector<int>>를 사용한다.
  2. 이익 계산:
    • 모든 가격에 대해, 기준 가격 $p$를 정하고, 모든 물건들을 순회하면서 다음과 같이 이익을 계산한다:
      • 물건의 가격이 $p$ 이상이면 이익 없음
      • 물건의 가격이 $p$ 미만이면 $p - \text{물건 가격} - \text{판매 비용}$만큼의 이익 발생
  3. 최적의 기준 가격 선택:
    • 계산된 이익의 합이 최대가 되는 기준 가격을 선택한다.
    • 최대 이익이 같은 경우, 더 작은 기준 가격을 선택한다.

코드 전체

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(0); 
    cin.tie(0);
    
    int n; 
    cin >> n;
    unordered_map<int, vector<int>> dict;
    // 물건의 가격과 해당 가격의 비용들을 dict에 저장
    for (int i = 0; i < n; i++)
    {
        int a, b; 
        cin >> a >> b;
        dict[a].push_back(b);
    }
    
    int maxVal = 0, answer = 0;
    // 모든 기준 가격 후보 i에 대해 이익 계산
    for (const auto &i : dict)
    {
        int sum = 0;
        // 모든 물건 가격 j에 대해 순회
        for (const auto &j : dict)
        {
            // j.second: j 가격에 해당하는 여러 비용들
            for (const auto &k : j.second)
            {
                // j.first: 실제 판매 가격, i.first: 기준 가격 후보
                // 기준 가격 이상인 경우 이익은 0, 미만인 경우 기준 가격에서 cost를 뺀 만큼 이익 발생
                if (j.first >= i.first && i.first - k > 0)
                    sum += i.first - k;
            }
        }
        // 최대 이익 갱신 및 기준 가격 선택 (같은 이익이면 더 낮은 기준 가격 선택)
        if (maxVal < sum)
        {
            answer = i.first;
            maxVal = sum;
        }
        else if (maxVal == sum)
        {
            if (answer > i.first)
                answer = i.first;
        }
    }
    cout << answer;
}

 

'C++ > Algorithm' 카테고리의 다른 글

[C++] 백준/Gold/14719. 빗물  (0) 2025.03.11
[C++] 백준/Gold/27172. 수 나누기 게임  (0) 2025.03.10
[C++] 백준/Silver/15903. 카드 합체 놀이  (0) 2025.03.04
[C++] 백준/Silver/14929. 귀찮아 (SIB)  (0) 2025.02.27
[C++] 백준/Gold/1744. 수 묶기  (0) 2025.02.26
'C++/Algorithm' 카테고리의 다른 글
  • [C++] 백준/Gold/14719. 빗물
  • [C++] 백준/Gold/27172. 수 나누기 게임
  • [C++] 백준/Silver/15903. 카드 합체 놀이
  • [C++] 백준/Silver/14929. 귀찮아 (SIB)
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • C++ (58)
        • Algorithm (52)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (20)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (9)
        • EOS (1)
      • Computer Science (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Fluid Simulation
    CUDA
    Algorithm
    그리디 알고리즘
    위상 정렬
    구현
    BFS
    수학
    dp
    C++
    UE5
    자료 구조
    CS
    GPU Programming
    Rendering Pipeline
    OpenGL
    FPS
    아이작 맵 생성
    unreal 5
    그래프 탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[C++] 백준/Silver/1487. 물건 팔기
상단으로

티스토리툴바