728x90
SMALL
백준 문제 풀이: 15734 [명장 남정훈]
문제 링크: https://www.acmicpc.net/problem/15734
문제 설명:
남정훈 명장은 L명의 왼쪽 선수와 R명의 오른쪽 선수, 그리고 추가로 A명의 대기 선수로 팀을 구성하려 합니다. 왼쪽 팀과 오른쪽 팀의 인원이 같아야 하며, 최대한 많은 선수를 사용할 수 있도록 팀을 배치해야 합니다.
최대 구성 가능한 팀의 인원을 출력합니다. 팀을 구성할 때 다음 규칙을 따릅니다:
- 왼쪽 팀과 오른쪽 팀의 인원이 같아야 합니다.
- 대기 선수를 적절히 사용하여 양 팀의 인원을 조정할 수 있습니다.
- 모든 선수를 반드시 사용할 필요는 없습니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int L, R, A;
cin >> L >> R >> A; // 왼쪽 팀, 오른쪽 팀, 대기 선수 수 입력
while (A > 0) {
// 대기 선수를 사용하여 양 팀의 균형 맞추기
if (L < R) {
L++;
} else {
R++;
}
A--;
}
// 최종적으로 팀 구성 가능 인원의 합 출력
cout << 2 * min(L, R) << '\n';
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 대기 선수를 양 팀의 인원 차이를 줄이는 데 우선적으로 사용합니다.
- 남은 대기 선수를 양 팀의 균형이 맞춰진 상태에서 최대한 배분합니다.
- 최종적으로 균형이 맞춰진 두 팀의 크기를 기준으로 팀 구성 인원의 합을 계산합니다.
- 구현 세부사항:
- 양 팀의 크기를 비교하여 대기 선수를 적은 팀에 추가합니다.
- 대기 선수가 소진된 후, 균형이 맞춰진 두 팀의 크기를 기준으로 결과를 계산합니다.
- 최대 팀 구성 인원은
2 * min(L, R)
로 계산됩니다.
- 시간 복잡도 분석:
- 대기 선수 A명에 대해 반복문이 실행되므로 O(A)입니다.
- A는 최대 1000이므로 효율적입니다.
결과
입력된 선수 수에 따라 최대한 많은 인원을 팀으로 구성하여 출력합니다. 양 팀의 균형을 유지하며 최적의 결과를 계산합니다.
해당 문제에 대한 다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 6376번 [e 계산](C++) -yes6686- 티스토리 (0) | 2024.07.18 |
---|---|
백준 6322번 [직각 삼각형의 두 변](C++) -yes6686- 티스토리 (1) | 2024.07.17 |
백준 19572번 [가뭄(Small)](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 10539번 [수빈이와 수열](C++) -yes6686- 티스토리 (0) | 2024.07.14 |
백준 23348번 [스트릿 코딩 파이터](C++) -yes6686- 티스토리 (1) | 2024.07.14 |