자바 코딩테스트

백준 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;
    }
}