자바 코딩테스트
백준 25757 임스와 함께하는 미니게임
백엔드 개발자
2025. 4. 15. 22:42
플레이 가능한 미니게임은 Y, F, O가 있고, 2,3,4명에서 플레이하는 게임. 인원수 부족시 게임 불가능.
같이 플레이하기로 신청한 회수 N과 플레이할 게임이 주어지면 최대 몇번이나 임스와 같이 게임할 수 있는지 구하기.
한 번 플레이 한사람과는 다시 플레이안한다.
첫줄에 신청한 횟수와 게임 종류
2번째 줄에는 플레이하고자 하는 사람들의 이름 문자열.
1 < N < 10,0000
임스를 제외한 숫자인점,
동명이인은 제거.
1. 횟수와 게임종류를 나누고
중복 제거이니 set을 써보면 좋을 것 같다.
중복 허용하지 않는 경우의 수 구하기 문제로 생각된다.
중복허용 없는 조합
3명중 2명 -> 3
4명중 2명 -> 6
4명중 3명 -> 4
5명중 2명 -> 10
nCk = n! / k!(n-k)!
이라고 생각했으나
아니다
전체인원 C (게임에 필요한인원 -1) 을 구하는 조합이었다.
도 아니고, 같이 한사람은 아예 플레이를 안하니 실제 인원/플레이필요 인원 -1 의 버림이었다
예를 들어 실제 인원이 4명이고 하는게임이 Y면 4명중에서 임스와 같이할 1명을 뽑는데 한번 뽑았으면 제거하는
마치 구슬 뽑기와 같은 그런 느낌의 문제였다.
package 백준.임스와_함께하는_미니게임;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Set<String> set = new HashSet<>();
String s = br.readLine();
String[] arr = s.split(" ");
int count = Integer.parseInt(arr[0]);
int playableCount = getPlayableCount(arr[1]);
for (int i = 0; i < count; i++) {
String name = br.readLine();
set.add(name);
}
int result = combination(set.size(), playableCount);
System.out.println(result);
br.close();
}
private static int combination(int i, int playableCount) {
return Math.floorDiv(i,playableCount -1);
}
private static int getPlayableCount(String s) {
if ("Y".equals(s)) {
return 2;
}
if ("F".equals(s)) {
return 3;
}
return 4;
}
}