노베이스 알고리즘 공부 #7. 백준 2875 대회 or 인턴 - Python

Anny·2024년 3월 24일
0

https://www.acmicpc.net/problem/2875

1. 문제

-- 백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다.
-- 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다.
-- 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.
-- 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.

2. 풀이

2-1. 접근

사실 K만 없었다면 단순히 1. 여학생을 2명씩 짝지을 수 있는 경우의 수 구하기 -> 2. 경우의 수 만큼 남학생 수를 나누기 과정을 통해서 쉽게 구할 수 있었을거 같다,,

그래서 생각해낸 접근방법
1. N - 2 + M - 1 >= K 일 경우, K 성립 가능, 아닐 경우 0 출력
2. N - 2, M - 1을 했을 때 1을 카운트 하는 것을
3. (N - 2) + (M - 1)의 값이 K과 같거나 작아지기 전(클 때) 까지 계속 반복

2-2. 자 구현해보자!

N, M, K = map(int, input().split())

if N < 2 or M < 1:
    print(0)
    
if N + M <= K:
    print(0)
    
max_team = 0
    
while (N - 2) + (M -1) >= K:
    if N >= 2 and M >= 1:
        N -= 2
        M -= 1
        max_team += 1
    else:
        break

print(max_team)
    

while과 if를 합쳐서 구현하는건 처음이었음,
1. if에서 else를 통해 break 할 수 있다는 사용법을 알아냈고
2. 처음 생각해낸 조합 문제로 굳이 해결할 필요가 없다는 것을 알아냄

profile
Newbie

0개의 댓글