한 번 같이 플레이한 사람과는 다시 플레이하지 않는다.
또한, 동명이인은 존재하지 않는다.
기준 이름을 제외한 이름을 HashSet에 저장하여 중복되는 이름을 제거한다.
기준이 되는 플레이어는 무조건 포함되므로 해당 규칙에 맞게 계산한다.
ex) 기준 이름 : lms0806
플레이어 이름 : { lms0806, exponentiale, jthis, leo020630 } - 4
게임 규칙 (Y-2) : 무조건 기준은 포함 4//1 = 4
ex) 기준 이름 : lms0806
플레이어 이름 : { powergee, skeep194, lms0806, tony9402, wider93, mageek2guanaah, jthis } - 7
게임 규칙 (F-3) : 7//2 = 3
ex) 기준 이름 : lms0806
플레이어 이름 : { mageek2guanaah, jthis, lms0806, exponentiale, leo020630, powergee, skeep194 } - 7
게임 규칙 (O-4) : 7//3 = 2
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());
String gameType = st.nextToken();
Map<String, Integer> gameRules = getRules();
int requiredPlayers = gameRules.get(gameType);
String mainPlayer = br.readLine().trim();
Set<String> uniquePlayers = new HashSet<>();
uniquePlayers.add(mainPlayer);
for (int i = 1; i < n; i++) {
String playerName = br.readLine().trim();
if (isValidName(playerName)) {
uniquePlayers.add(playerName);
}
}
int totalPlayers = uniquePlayers.size();
int maxGames = totalPlayers / (requiredPlayers - 1);
System.out.println(maxGames);
br.close();
}
private static Map<String, Integer> getRules() {
return Map.of(
"Y", 2,
"F", 3,
"O", 4
);
}
private static boolean isValidName(String name) {
if (name.length() > 20) {
return false;
}
return name.matches("[a-zA-Z0-9]+");
}
}
N을 이름 수라고 정의
이미 예제가 입력 요구 조건에 잘 맞추어 입력된다.
그래서 검증 과정이 없을 때도 정상적으로 작동하였다. 하지만 테스트 케이스가 여러 개 나올 경우를 생각하여 검증 과정을 포함해서 작성하였다.
풀이 후에 보니 게임 종류 외에 다른 문자열이 입력되었을 때의 상황은 생각하지 못해 예외 처리를 하지 못했다.
그래도 재미있었다.