
- 티어 : bronze 3
- 정답여부 :
오답- 알고리즘 유형 :
수학,구현,사칙연산- 시간 제한 :
1초
백준대학교에서는 대회에 나갈 때 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
N : 여학생M : 남학생K : 인턴cnt : 팀
Javaimport 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))
통과
어려운 문제는 아니였지만 문제 이해하는데 조금 시간이 걸린거..?
다른 풀이로 나눈 몫과 비교하여 구현한 코드를 가져와봤다..
Javaimport 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)); }
그리디 알고리즘은 문제를 이해를 잘 해야 한다. 그래야 알고리즘 설계가 어렵지 않다.