fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 31800 (C++) Best Chance
최초 업로드: 2025-10-18 13:31:21
최근 수정 시간: 2025-10-18 13:31:21
게시자: rlatjwls3333
카테고리: 백준
조회수: 10
# [Bronze I] Best Chance [문제 링크](https://www.acmicpc.net/problem/31800) ## 문제 설명 <p>세중이는 물건 사는 것을 좋아한다. 고양이를 키우고 싶어서 바나나 우유를 사거나 그림을 그리고 싶어서 삼다수 버즈 케이스를 사는 등 다양한 물건을 산다. 하지만 돌이켜보니 후회되는 구매도 많이 한 것 같아 경제적인 소비생활을 하려고 공부를 해왔다. 그래서 이제 순수익이 가장 크도록 물건을 구매하고 싶어 한다.</p> <p>물건의 순수익을 구하기 위해선 먼저 물건의 기회비용을 구해야 한다. 어떤 물건의 기회비용은 <strong>자신을 제외한 나머지 물건의 이익 중 가장 큰 값에서 자신의 가격을 뺀 것</strong>이다. 순수익은<strong> 물건을 구매했을 때의 이익에서 그 물건의 기회비용과 가격을 뺀 것</strong>이다. 예를 들어 $3$개의 물건이 있다고 하자. 각 물건을 구매했을 때의 이익이 각각 $280$, $270$, $240$이고 가격이 각각 $100$, $100$, $100$이면 각 물건의 기회비용은 $170$, $180$, $180$이 된다. 순수익은 각각 $10$, $-10$, $-40$이다.</p> <p>각 물건을 구매했을 때의 이익과 각 물건의 가격이 주어질 때, 각 물건의 순수익을 구해보자.</p> ## 입력 <p>첫 번째 줄에 물건의 개수 $N$이 주어진다.</p> <p>두 번째 줄에 $N$개의 물건을 각각 구매했을 때의 이익이 공백으로 구분되어 주어진다.</p> <p>세 번째 줄에 $N$개의 물건의 가격이 공백으로 구분되어 주어진다.</p> ## 출력 <p>첫 번째 줄에 각 물건의 순수익을 공백으로 구분하여 입력으로 주어진 순서대로 출력한다.</p> ## 풀이 기회 비용은 profit[i] - max(profit[another])이니, 가장 큰 이익과 2번째로 큰 이익만 알면 된다. 식을 정리하면 가격은 순수익에 영향을 주지 않는다는 사실을 알 수 있다. ``` c++ #include<bits/stdc++.h> using namespace std; int profit[300'000]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int max1=-1, max2=-1; for(int i=0;i<n;i++) { cin >> profit[i]; if(profit[i]>max1) max2=max1, max1=profit[i]; else if(profit[i]>max2) max2=profit[i]; } for(int i=0;i<n;i++) cout << profit[i] - (max1==profit[i] ? max2 : max1) << ' '; } ```