imhamburger 님의 블로그
탐욕법(Greedy) - 3 본문
이번엔 백준 대회 or 인턴 문제를 풀어보자. 문제는 다음과 같다.
문제설명
백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.)
백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.
백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.
여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.
입력
첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),
출력
만들 수 있는 팀의 최대 개수을 출력하면 된다.
예제 입력 | 예제 출력 |
6 3 2 | 2 |
2 1 1 | 0 |
6 10 3 | 3 |
처음에 이 문제를 풀 때 if문을 이용하였었는데 if문을 사용하지 않더라도 문제를 조금만 더 이해한다면 더 간단하게 풀 수 있는 문제였다.
무조건 여학생 2명 + 남학생 1명 으로 팀을 이룰 수 있으니 여학생이 2명 미만 혹은 남학생이 1명 미만이면 아예 팀을 만들 수 없는 상황이니 0으로 출력되어야 한다.
그리고 인턴쉽에 참여해야하는 인원을 빼고도 최소 3명(여 2 남 1)이 있어야 한다.
n, m, k = map(int, input().split()) #입력된 값을 가져오기
answer = 0
while n >= 2 and m >= 1 and n + m - k >= 3:
n -= 2 #while문 조건을 만족시키면 여학생은 2명씩 제거
m -= 1 #남학생은 1명씩 제거
answer += 1 #여 2 남 1 조건이 되니 answer에 1팀씩 더해주기
print(answer)
앞서 풀었던 체육복 문제와 같은 맥락의 문제이다.
이 문제를 풀면서 헤맸던 건 여 2 남 1 일 때 다른 변수에다가 그 수를 저장하려 했었는데 하지만 문제는 팀 수를 구하면 되는 것이기 때문에 굳이 변수를 지정하지 않고 빼면서 팀 개수를 세면되었다.
'알고리즘(Algorithm)' 카테고리의 다른 글
알고리즘(Algorithm) - 정렬 알고리즘 개념 이해와 구현하기 (+재귀함수) (0) | 2024.09.01 |
---|---|
자료구조 - 스택(Stack)과 큐(Queue) 그리고 힙큐(Heapq) (0) | 2024.08.19 |
자료구조 - 배열(Array)과 리스트(List) 그리고 벡터(Vector) (0) | 2024.08.13 |
탐욕법(Greedy) - 2 (0) | 2024.06.11 |
탐욕법(Greedy) (0) | 2024.06.10 |