Problem Solving/BOJ

[백준 / BOJ] C++ 23322 초콜릿 뺏어 먹기

nageune 2023. 8. 11. 04:45
728x90
반응형

23322번: 초콜릿 뺏어 먹기

 

문제

https://www.acmicpc.net/problem/23322

 

23322번: 초콜릿 뺏어 먹기

연두는 $N$개의 통에 초콜릿을 담아서, 초콜릿의 개수가 오름차순이 되도록 일렬로 배열해 놓는다. 즉, ($1$번째 통의 초콜릿의 개수) $\le$ ($2$번째 통의 초콜릿의 개수) $\le \dots \le$ ($N$번째 통의

www.acmicpc.net

 

 

풀이

이 문제에서 예제를 보면, 모든 통의 초콜릿 개수가 초콜릿 수가 가장 적은 통과 같도록 만든다.

입력받는 값 중 K는 사실상 필요없는 값이고, 입력받은 배열을 오름차순으로 정렬하면 0번 index의 값이 최솟값이 된다.

1번부터 N-1번 index까지 값을 순회하며 0번 index의 값(최솟값)보다 큰 경우에만 조건문에 진입한다.

조건문에 진입한 경우, 먹을 수 있는 초콜릿 수의 최댓값을 (현재 index의 값) - (0번 index의 값)만큼 증가시키고 날짜를 1 증가시킨다.

 

즉, 가장 작은 수보다 큰 수의 개수가 날짜, (큰 숫자 - 가장 작은 수)의 합이 초콜릿의 수다.

 

 

코드

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

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, k, a = 0, b = 0;
  cin >> n >> k;
  vector<int> v(n);
  for (int i = 0; i < n; i++)
    cin >> v[i];
  sort(v.begin(), v.end());
  for (int i = 1; i < n; i++)
    if (v[i] > v[0]) {
      a += v[i] - v[0];
      b++;
    }
  cout << a << ' ' << b;
  return 0;
}

 

728x90
반응형