사칙연산(arithmetic), 구현(implementation), 수학(math)
백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.)
백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.
백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.
여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.
첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),
만들 수 있는 팀의 최대 개수를 출력하면 된다.
입출력 예
TC 1 | TC 2 | TC 3 | TC 4 | |
---|---|---|---|---|
입력 | 6 3 2 | 2 1 1 | 6 10 3 | 4 2 3 |
출력 | 2 | 0 | 3 | 1 |
n, m, k = map(int, input().split())
result = 0
while k != 0:
if n > 2*m:
n -= 1
elif n < 2*m:
m -= 1
else: # 같아졌으면 일단 여자 빼기
n -= 1
k -= 1
if n >= 2*m:
result = m
else:
result = n // 2 # 몫
print(result)
문제 조건 맞출라고 하나하나 챙겨준 코드
여 : 남 = 2 : 1 의 비율이 맞을 때는 남자를 빼든 여자를 빼든 큰 상관은 없지만 우선 여자를 빼줌
너무 구구절절 코드 같아서 마음에 안 듦
n, m, k = map(int, input().split())
for i in range(k):
if n >= 2*m:
n -= 1
else:
m -= 1
print(min(n//2, m))
큰 의미는 없지만 .. while문을 for문으로 바꿔줬고 n == 2*m
일 때도 그냥 n > 2*m
일 때랑 n -= 1
로 합쳐줌
마지막 출력할 때 다시 또 n과 2m을 비교해서 출력하던 것을 min()
으로 바꿔줬음
n, m, k = map(int, input().split())
result = 0
while n >= 2 and m >= 1 and n + m - 3>= k:
n -= 2
m -= 1
result += 1
print(result)
팀을 꾸릴 수 있는 최소 조건을 한 줄로 구현
여자는 2명 이상, 남자는 1명 이상 있으면서, 한 팀을 만들고 남는 인원이 빠져야 할 인원보다는 커야 함
한 팀을 만들게 되면 여자 2 + 남자 1, 총 3명이 빠지게 되므로 남는 인원은 n + m - 3이 되고, 인턴십으로 빠져야 할 인원보다 남는 인원이 많은 동안에는 팀을 계숙 만들 수 있음
너무 조건 하나하나 맞춰줄려고 생각하다가 + 꼬아서 생각하다가 시간이 좀 걸렸음 ㅜ ㅜ
문제에서 원하는 걸 한 번 행하기 위해서 갖춰져야 할 최소 조건을 먼저 손으로 적어보는 게 도움이 되는 것 같다