백준 2010 플러그

hyoJeong·2021년 5월 5일
0

첫 게시글이네요! 앞으로 알고리즘, 백엔드 관련 공부 내용을 올리지 않을까 싶습니다.
아직 부족한게 많다보니, 풀이를 보면서 더 좋은 풀이법, 부족한 부분이 있다면 말해주시면 감사하겠습니다~

2010 플러그라는 문제에 대한 풀이입니다.

문제링크:https://www.acmicpc.net/problem/2010
브론즈 문제로 난이도는 어렵지 않습니다.
생각한 방식은 처음 n개 즉 멀티탭의 개수를 입력받고 각 멀티탭마다 꽃을 수 있는 플러그 수를 입력받습니다.
vector 로 플러그 수를 입력받고, 내림차순으로 정렬합니다.
그렇게 될 경우, 가장 많이 플러그를 꽃을 수 있는 멀티탭이 v[0] 에 오게 됩니다.
답을 출력할 변수 res에 처음 v[0] 값을 저장합니다.
그 후 for 문을 i=1 부터 n전까지 돌면서 멀티텝에 꽃을수 있는 플러그 수가 남아있을경우
res--을 하고, 해당 멀티텝에서 꽃을 수 있는 플러그 수를 res에 더해줍니다.
위의 내용은 코드를 보면 더 이해가 잘 될것이라 생각합니다.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(){
    
    cin.tie(0);
    cout.tie(0);
    std::ios::sync_with_stdio(false);
    
    int n;
    cin>>n;
    int res=0;
    vector<int>v(n);
    for(int i=0;i<n;i++){
        cin>>v[i];
    }
    sort(v.begin(), v.end(),greater<>());
    
    //맨 처음 가장 플러그 수 많은 멀티텝을 연결했을떼
    res+=v[0];
    for(int i=1;i<n;i++){
        if(v[i-1]>=1){
            res--;
            res+=v[i];
        }
        
    }
    cout<<res<<"\n";
    
    return 0;
}

제가 작성한 코드입니다. 혹시 궁금한 부분이 있다면 댓글로 남겨주세요!

0개의 댓글