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
- 투 포인터
- 스택
- BFS
- 우선순위 큐
- 백트래킹
- 그래프
- 다이나믹 프로그래밍
- ue5
- 브루트포스
- 유니티
- XR Interaction Toolkit
- 수학
- 누적 합
- 그리디 알고리즘
- 트리
- 시뮬레이션
- 다익스트라
- Team Fortress 2
- 자료구조
- c++
- 백준
- VR
- 문자열
- 정렬
- Unreal Engine 5
- 재귀
- 구현
- 유니온 파인드
- DFS
- 알고리즘
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 |