백준 2875번(파이썬):대회 or 인턴

백준 2875번 문제 정리글 입니다.

문제 출처-https://www.acmicpc.net/problem/2875

문제 내용

백준 2875번

나의 풀이

    n,m,k=map(int,input().split())
    w_team,m_team=n//2,m
    result=0

    if n>=k and m>=k:
        for i in range(k+1):
            x=(n-i)//2
            y=m-(k-i)
            result=max(result,min(x,y))
    elif n>=k and m<k:
        for i in range(m+1):
            x=(n-(k-i))//2
            y=m-i
            result=max(result,min(x,y))
    elif n<k and m>=k:
        for i in range(n+1):
            x=(n-i)//2
            y=m-(k-i)
            result=max(result,min(x,y))
    else:
        for i in range(k-m,n+1):
            x=(n-i)//2
            y=m-(k-i)
            result=max(result,min(x,y))        
    print(result)
  1. n과 m의 k와의 크기 관계에 따라서 4가지 조건으로 나눠준다.
  2. 그 후, 각 경우에 따라 반복문을 통해 k명의 인턴 참가자 수를 적절히 분배하여 최대 팀원 수를 구한다.

다른 풀이

   n, m, k = map(int, input().split())	# n 여학생 수, m 남학생 수, k 인턴쉽 학생 수
    result = 0

    while n >= 2 and m >= 1 and n + m >= k + 3:	# 2명 , 1명 팀 만들 수 있고, 인턴쉽도 보낼 수 있는 수 일때
        n -= 2	# 빼주고
        m -= 1	# 빼주고
        result += 1	# 팀 수는 하나씩 더해준다
    print(result)

너무 어렵게 생각했다.. 여학생 2명, 남학생 1명이 남아 팀을 만들 수 있는 상태 + 인턴쉽 참여 인원보다 한 팀을 만들 수 있는 상태 일 때, 반복해서 팀 수를 만들어낼 수 있게 해주면 된다…

조건이 많이 주어지면, 조건에 따른 제약적 상황을 구현하도록 해야한다…

참조 링크