본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 24365 : ПЧЕЛИЧКАТА МАЯ

반응형

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

 

24365번: ПЧЕЛИЧКАТА МАЯ

На три цветя, подредени в редица на разстояние през 1 метър, са кацнали пчели. На лявото цвете пчелите не са повече от тези на средното, а на ср

www.acmicpc.net

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

각 꽃의 꿀벌 수를 저장할 vector<pair> v, 정답을 출력할 변수 ans, 전체 꽃의 평균 avg를 선언 후 정보를 입력받습니다.가장 왼쪽 꽃을 0번, 중앙을 1번, 오른쪽을 2번 index로 생각해 vector에 first로는 꿀벌 수, second에는 꽃의 index를 저장합니다.

📔 풀이과정

 1. 최대한 덜 이동하며 균등하게  배분되려면 모든 꿀벌 / 3이상의 꿀벌들이 각 꽃에 배치되어야 합니다. 이 값을 구해 avg에 저장합니다.

 2. 꿀벌 마리 수에 대해 오름차순으로 정렬합니다.

 3. 균등하게 배치하기 위해서는 가장 많은 꿀벌이 있는 꽃에서 날아오는 방법 뿐입니다.

거리 = 가장 많은 장소(v.second) - 나머지 장소이며 날아갈 꿀벌 수 = (avg - 나머지 꽃의 꿀벌 수 ) 가 됩니다. 

📔 정답출력

거리 * 날아갈 꿀벌 수의 총합이 답입니다. 이를 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
vector <pii> v(3);
int ans, avg;
int main(){
    v[0].second = 0; v[1].second = 1; v[2].second = 2;
    cin >> v[0].first >> v[1].first >> v[2].first;
    avg = (v[0].first + v[1].first + v[2].first) / 3;
    sort(v.begin(), v.end());
    cout << abs(v[2].second - v[0].second) * (avg - v[0].first) + abs(v[2].second - v[1].second) * (avg - v[1].first);
}