Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 그리디 알고리즘
- 다이나믹 프로그래밍
- 트리
- 브루트포스
- VR
- 문자열
- 자료구조
- Team Fortress 2
- 구현
- XR Interaction Toolkit
- 정렬
- DFS
- ue5
- BFS
- 스택
- c++
- 누적 합
- 우선순위 큐
- 유니온 파인드
- 재귀
- 유니티
- 시뮬레이션
- Unreal Engine 5
- 다익스트라
- 투 포인터
- 백트래킹
- 알고리즘
- 그래프
- 수학
- 백준
Archives
- Today
- Total
1일1알
백준 2785번 체인 C++ 본문
https://www.acmicpc.net/problem/2785
2785번: 체인
희원이는 그의 다락방에서 N개의 체인을 찾았다. 각각의 체인은 몇 개의 고리로 연결되어 있는데, 각각의 고리는 최대 두 개의 인접한 고리를 가질 수 있다. 각각의 고리는 열고 닫을 수 있다. 그
www.acmicpc.net
고리의 수가 적은 체인부터 분해하여 연결해야 한다.
1. 정렬을 한다.
2. 연결해야 하는 체인의 수가 제일 작은 체인의 고리의 수와 같으면 제일 작은 체인을 분해해서 연결하면 딱 떨어진다.
3. 연결해야 하는 체인의 수가 제일 작은 체인의 고리의 수보다 크다면 제일 작은 체인을 분해하고 다음 체인까지도 고려해야 한다.
4. 연결해야 하는 체인의 수가 제일 작은 체인의 고리의 수보다 작다면 제일 작은 체인을 분해하면 모든 체인을 연결할 수 있지만 자기의 체인이 남기때문에 1을 더해줘야한다.
2~4 검사 반복
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>
using namespace std;
using int64 = long long;
int n;
vector<int> v;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
v = vector<int>(n);
for (int i = 0; i < n; i++) cin >> v[i];
sort(v.begin(), v.end());
int ans = 0;
int idx = 0;
int cnt = v.size() - 2;
while (true) {
if (cnt == v[idx]) {
ans += v[idx];
break;
}
else if (cnt > v[idx]) {
ans += v[idx];
cnt -= v[idx] + 1;
idx++;
}
else {
ans += cnt + 1;
break;
}
}
cout << ans;
}
'알고리즘' 카테고리의 다른 글
백준 18115번 카드 놓기 C++ (0) | 2023.01.10 |
---|---|
백준 17391번 무한부스터 C++ (0) | 2023.01.09 |
백준 3005번 크로스워드 퍼즐 쳐다보기 C++ (0) | 2023.01.07 |
백준 16437번 양 구출 작전 C++ (0) | 2023.01.06 |
백준 14923번 미로 탈출 C++ (0) | 2023.01.05 |