첫 게시글이네요! 앞으로 알고리즘, 백엔드 관련 공부 내용을 올리지 않을까 싶습니다.
아직 부족한게 많다보니, 풀이를 보면서 더 좋은 풀이법, 부족한 부분이 있다면 말해주시면 감사하겠습니다~
문제링크: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;
}
제가 작성한 코드입니다. 혹시 궁금한 부분이 있다면 댓글로 남겨주세요!