※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 25186번 문제인 INFP 두람이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/25186
25186번: INFP 두람
옷의 총개수는 C++의 32비트 int 자료형의 최댓값인 2,147,483,647을 초과할 수도 있다.
www.acmicpc.net
총 total개의 옷이 있고 그중 가장 많은 개수를 가진 옷 C의 개수를 K라 하자.
이 때 만약 K > total/2라면 어떻게 배치해도 C가 인접하게 배치될 수밖에 없다는 점을 관찰하자.
만약 그렇지 않다면 항상 모든 옷이 인접하지 않게끔 배치할 수 있다. 예를 들어 원형 리스트의 각 칸에서 한 칸씩 건너뛰면서 가장 많은 개수가 있는 옷부터 하나씩 채워넣는 식으로 배치하면(단, total이 짝수라면 한 바퀴를 돈 뒤 두 칸을 건너뛰고 나머지를 채운다) 모든 옷이 인접하지 않게끔 배치가 된다.
사람이 한 명만 있다면 서로 다른 두 명이 인접한 경우가 존재하지 않으므로 Happy를 출력해야하는 점을 잊지 말자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
ll mx = 0, total = 0;
for (int i = 0; i < N; i++) {
ll x; cin >> x;
mx = max(mx, x);
total += x;
}
if (mx <= total / 2) cout << "Happy";
else cout << "Unhappy";
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6137 // C++] 문자열 생성 (0) | 2022.08.16 |
---|---|
[BOJ 5623 // C++] 수열의 합 (0) | 2022.08.15 |
[BOJ 25185 // C++] 카드 뽑기 (0) | 2022.08.14 |
[BOJ 4850 // C++] Baskets of Gold Coins (0) | 2022.08.14 |
[BOJ 25184 // C++] 동가수열 구하기 (0) | 2022.08.14 |