임스와 함께하는 미니게임
문제
임스가 미니게임을 같이할 사람을 찾고 있습니다.
플레이할 미니게임으로는 윷놀이 Y, 같은 그림 찾기 F, 원카드 O가 있습니다. 각각 2, 3, 4 명이서 플레이하는 게임이며 인원수가 부족하면 게임을 시작할 수 없습니다.
사람들이 임스와 같이 플레이하기를 신청한 횟수 N과 임스가 플레이할 게임의 종류가 주어질 때, 최대 몇 번이나 임스와 함께 게임을 플레이할 수 있는지 구하시오.
임스와 여러 번 미니게임을 플레이하고자 하는 사람이 있으나, 임스는 한 번 같이 플레이한 사람과는 다시 플레이하지 않습니다.
임스와 함께 플레이하고자 하는 사람 중 동명이인은 존재하지 않습니다. 임스와 lms0806은 서로 다른 인물입니다.
입력
첫 번째 줄에는 사람들이 임스와 같이 플레이하기를 신청한 횟수 N과 같이 플레이할 게임의 종류가 주어진다. (1≤N≤100000)
두 번째 줄부터 N개의 줄에는 같이 플레이하고자 하는 사람들의 이름이 문자열로 주어진다. (1≤ 문자열 길이 ≤20)
사람들의 이름은 숫자 또는 영문 대소문자로 구성되어 있다.
출력
임스가 최대로 몇 번이나 게임을 플레이할 수 있는지 구하시오.
예제 입력 1
7 Y
lms0806
lms0806
exponentiale
lms0806
jthis
lms0806
leo020630
예제 출력 1
4
예제 입력 2
12 F
lms0806
powergee
skeep194
lms0806
tony9402
lms0806
wider93
lms0806
mageek2guanaah
lms0806
jthis
lms0806
예제 출력 2
3
예제 입력 3
12 O
lms0806
mageek2guanaah
jthis
lms0806
exponentiale
lms0806
leo020630
lms0806
powergee
lms0806
skeep194
lms0806
1) 임스와 같이 플레이하기를 신청한 횟수 받아오기
2) 플레이할 게임의 종류와 각각 몇명에서 할 수 있는지 hash로 설정
3) 같이 플레이하고자 하는 사람들의 이름 받아오기
4) hashSet으로 중복되는 사람들 있으면 자동으로 걸러주기
1.
//플레이 신청 횟수
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//게임 받아오기
String game = sc.next();
- 플레이 신청 횟수를 받아오고
- 게임을 받아올 때 공백으로 입력을 받으니 sc.next()로 받아오면 된다.
**참고
- next()는 공백 뒤의 문자열을 받아온다
- nextInt()나 next()로 받아온 뒤에는 줄바꿈이 남아있을 수 있으니 nextLine()으로 버퍼를 비우고 다시 읽어오면 된다.
2.
Map<String, Integer> gameMap = new HashMap<>();
gameMap.put("Y",2);
gameMap.put("F",3);
gameMap.put("O",4);
- Map으로 게임 타입과 게임 가능한 인원수를 put함.
3.
int requiredPeople = gameMap.get(game);
- 각 게임에 해당하는 필요 인원수를 gameMap에서 꺼내서 requiredPeople에 저장해라
만약 int requiredPeople = gameMap.get("F"); 이라면 값은 3이 되는 것.
4.
Set<String> name = new HashSet<>();
for(int i=0; i<n; i++){
name.add(sc.next());
}
- 중복을 제거하기 위해 hashSet을 사용하고,
- 지금처럼 입력이 한 줄씩 있을 때는 sc.next()를 사용해도 된다.
-> 공백이나 개행이 나올 때까지 문자열 하나 읽기
5.
//전체 사람들 수 받아오기
int total = name.size() + 1;
int teamCount = total/requiredPeople;
System.out.println(teamCount);
- 사람들 수 받아온 것에서 + 임스
- 총 게임 횟수 = 전체 사람 / 한 게임에 가능한 사람 수
5번처럼 하니까 틀렸다고 나옴
?? 임스는 항상 포함임
int totalPeople = name.size();
int maxGameCount = totalPeople / (requiredPeople - 1);
- 임스 빼고 총 신청자 수 구하고
- 필요 멤버는 임스 빼고 생각해서 구함. 즉, 임스랑 같이 하는 사람들을 생각해서 구해야함.
<전체 코드>
import java.util.*;
public class DAY12 {
public static void main(String[] args){
//플레이 신청 횟수
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//게임 받아오기
String game = sc.next();
Map<String, Integer> gameMap = new HashMap<>();
gameMap.put("Y",2);
gameMap.put("F",3);
gameMap.put("O",4);
//각 게임에 해당하는 필요 인원수
int requiredPeople = gameMap.get(game);
//사람들 받아오기
Set<String> name = new HashSet<>();
for(int i=0; i<n; i++){
name.add(sc.next());
}
//전체 사람들 수 받아오기
int totalPeople = name.size(); // 나 말고 신청자 수
int maxGameCount = totalPeople / (requiredPeople - 1);
System.out.println(maxGameCount);
}
}
이제 해시를 좀 알겠다. 어제 특강 들은게 많이 도움이 된듯.
재밌다!
'코테 - 자바' 카테고리의 다른 글
| 99클럽 코테 스터디 18일차 TIL + 정렬(2) (2) | 2025.04.17 |
|---|---|
| 99클럽 코테 스터디 17일차 TIL + 정렬 (0) | 2025.04.16 |
| 99클럽 코테 스터디 15일차 TIL + 해시(2) (1) | 2025.04.14 |
| 99클럽 코테 스터디 12일차 TIL + 해시 (1) | 2025.04.11 |
| 99클럽 코테 스터디 8일차 TIL + 문자열/해시 (1) | 2025.04.09 |