대회 or 인턴(2875번)

PearLine_Zero·2024년 5월 22일

하루에 1커밋 CodingTest

목록 보기
105/110
post-thumbnail
  • 티어 : bronze 3
  • 정답여부 : 오답
  • 알고리즘 유형 : 수학 , 구현, 사칙연산
  • 시간 제한 : 1초

💡문제

백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.)

백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 대회에 참여하려는 학생들 중 K명은 반드시 인턴쉽 프로그램에 참여해야 한다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다.

백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다.

여러분은 여학생의 수 N, 남학생의 수 M, 인턴쉽에 참여해야하는 인원 K가 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다.

💡입력

첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N),

💡출력

만들 수 있는 팀의 최대 개수을 출력하면 된다.

💡예제 입력 1

6 3 2

💡예제 출력 1

2

💡예제 입력 2

2 1 1

💡예제 출력 2

0

💡예제 입력 3

6 10 3

💡예제 출력 3

3

💡문제요약

  • 인턴을 나가야하는 인원을 제외하고 여학생과 남학생이 팀을 만들어 최대 나갈수 있는 팀을 구하면 되는 문제

💡알고리즘 설계

  • N : 여학생
  • M : 남학생
  • K : 인턴
  • cnt : 팀
  1. N 은 2명이상 M은 1명 이상이어야 한다.
  2. 위의 1, 2번 조건을 충족하여 팀을 결성했을시 전체 인원 - 3명(팀원수) 한 뒤 인턴을 보낼 K 명이 남아 있는지 확인한다.

💡작성코드

  • Java
import java.io.*;
import java.util.*;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		int cnt = 0;
		while (N >=2 && M >= 1 && (N + M) - K >= 3) {
			N -=2;
			M -=1;
			cnt++;
		}
		System.out.println(cnt);
	}
}

💡시간복잡도

(O(1))

💡틀린 이유 or 수정할 부분

통과

어려운 문제는 아니였지만 문제 이해하는데 조금 시간이 걸린거..?

다른 풀이로 나눈 몫과 비교하여 구현한 코드를 가져와봤다..

💡틀린 부분 수정 or 다른풀이

  • Java
import java.util.*;
import java.io.*;
public class Boj_2875 {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());  //여학생
		int m = Integer.parseInt(st.nextToken());  //남학생
		int k = Integer.parseInt(st.nextToken());  //인턴쉽	
		while(k > 0) {
			if(n / 2 >= m) {
				n--;
				k--;
			}
			else {
				m--;
				k--;
			}
		}
		System.out.println(Math.min(n / 2, m));
	}

💡느낀점 or 기억할 정보

그리디 알고리즘은 문제를 이해를 잘 해야 한다. 그래야 알고리즘 설계가 어렵지 않다.

profile
https://baesaa0304.tistory.com 블로그 이사합니다~

0개의 댓글