Greedy(7)_대회or인턴(2875번)

백준 2875

원칙 : 대회에 나가기 위해서는 2명의 여학생과 1명의 남학생이 팀을 결성하는 것 N : 여학생의 수, M : 남학생의 수,

그런데 대회에 참여 학생들 중 K명의 학생들은 반드시 인턴십 프로그램에 참여해야함. 인턴십에 참여하는 학생들은 대회에 참여하지 못함

N,M,K가 주어질 때, 만들 수 있는 최대의 팀 수를 구한다.

예시를 보자.

6,3,2가 주어졌다.

(6,3)에서 여학생 2명, 남학생 한명 제외시키면 (4,2) 다시 여학생 2명 남학생 한명 제외시키면 (2,1)이다.

2명이 무조건 인턴십에 가야하므로 최대 2팀 밖에 만들지 못한다.

따라서 최대 2개의 팀 결성 가능.

아이디어

  1. 여학생 수와 남학생 수를 입력 받고
  2. 여학생 수가 2이상인지, 남학생 수가 1이상인지 그리고 전체 수가 인턴십을 가야하는 인원수를 고려한 수 만큼이 더 큰지 확인한다
  3. 확인해서 가능하다면 팀원 수를 늘려주고 갯수를 빼준다.
  4. 이후 반복하면서 체크

Q) 그런데 값을 갱신해줄 떄, 인턴십을 누가가야하는지 어떻게 알지? -> 마지막에 결정하니 알 필요 없어

코드

import sys

N, M, K = map(int, sys.stdin.readline().split())

sum = N+M
total = 0
while(True):
    if(N >= 2 and M >= 1 and sum >= K+3):
        total += 1
        N -= 2
        M -= 1
        sum = N+M
    else:
        break
print(total)

알게된 사실


참고자료

[파이썬 줄바꿈 없이 출력]http://mwultong.blogspot.com/2007/01/python-print-no-newline-print.html [코드 참조]https://lmcoa15.tistory.com/48

0%