99클럽 코테스터디 6기 12일차 TIL (백준 25757)

glory_young·2025년 4월 15일

📌문제접근

문제 : 백준 25757 : 임스와 함께하는 미니게임
유형 : 문자열, 해시테이블

임스가 미니게임을 같이할 사람을 찾고 있습니다.

플레이할 미니게임으로는 윷놀이 YY, 같은 그림 찾기 FF, 원카드 OO가 있습니다. 각각 2, 3, 4 명이서 플레이하는 게임이며 인원수가 부족하면 게임을 시작할 수 없습니다.

사람들이 임스와 같이 플레이하기를 신청한 횟수 NN과 임스가 플레이할 게임의 종류가 주어질 때, 최대 몇 번이나 임스와 함께 게임을 플레이할 수 있는지 구하시오.

1) 첫 줄에 총 신청 횟수 N과 진행할 게임이 주어진다
2) N명의 사람 이름이 주어진다. 이때 이름이 동일하면 동일한 사람이다.
2-1) 동일한 이름이 들어오는 것은 무시해도 된다.
3) 한 사람은 한 번만 게임을 할 수 있다.
3-1) 임스는 모든 게임에 참여하므로 실제 필요한 인원은 게임별로 1, 2, 3명이다.

📌제출코드

#include <iostream>
#include <string>
#include <unordered_set>

using namespace std;

int main() {
	int n;
	char game;
	
	cin >> n >> game;
	string user;
	unordered_set<string> userSet;
	
	for (int i = 0; i < n; i++) {
		cin >> user;
		userSet.insert(user);		
	}
	int count = userSet.size();
	if (game == 'Y') {
		cout << count << endl;
		return 0;
	}
	if (game == 'F') {
		cout << count/2 << endl;
		return 0;
	}
	if (game == 'O') {
		cout << count/3 << endl;
		return 0;
	}
	return 0;
}

📌문제 해결

  1. 중복되는 인물 처리
    동일한 이름은 동일한 사람으로 간주되므로 중복되는 인물은 무시하고 전체 인원 수만 계산하면 된다. 각 이름이 가지는 특별한 의미는 없기 때문에 map이 아닌 set으로 인물을 저장하고 탐색하였다.
    unordered_set은 중복된 값을 자동으로 무시하기 때문에 이 문제에 적합하며, 최총 인원수는 .size()를 통해 간편하게 확인할 수 있다.

📌오늘의 회고

해시 테이블 활용이 익숙해지고 있는 것 같다.

0개의 댓글