fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 26084 (C++) DPS
최초 업로드: 2025-10-23 21:09:44
최근 수정 시간: 2025-10-23 21:09:44
게시자: rlatjwls3333
카테고리: 백준
조회수: 8
# [Silver II] DPS [문제 링크](https://www.acmicpc.net/problem/26084) ## 문제 설명 <p>ICPC는 세 명이 한 팀을 이뤄 참가하는 국제 대학생 프로그래밍 대회이다. ICPC에 참가하는 각 팀의 이름은 세 팀원의 핸들 첫 글자를 임의의 순서로 이어 붙인 것이다. 핸들이란 Baekjoon Online Judge와 같은 온라인 채점 사이트에서 사용하는 고유한 ID이다.</p> <p>예를 들어 핸들이 각각 DONGGAS, PICASSO, SEMTEO인 세 명으로 이루어진 팀의 이름은 DPS, DSP, PDS, PSD, SDP, SPD 중 하나이다. 또, 핸들이 각각 RAARARAARA, WBCHO, WEASEL인 세 명으로 이루어진 팀의 이름은 RWW, WRW, WWR 중 하나이다.</p> <p>팀 이름 $S$와 $N$명의 핸들이 주어지면, $N$명으로 팀 $S$를 구성하는 모든 경우의 수를 구해보자.</p> ## 입력 <p>첫째 줄에 팀 이름 $S$가 주어진다. 팀 이름 $S$는 영어 대문자 3개로 이루어져 있다.</p> <p>둘째 줄에 사람의 수를 나타내는 양의 정수 $N$($3 \le N \le 50\,000$)이 주어진다.</p> <p>셋째 줄부터 $N$명의 핸들이 한 줄에 하나씩 주어진다. 각 핸들의 길이는 1이상 10이하이다.</p> <p>모든 사람의 핸들은 영어 대문자로만 이루어진 공백이 없는 문자열이다. 또, 모든 사람의 핸들은 서로 다르다.</p> ## 출력 <p>첫째 줄에 팀 $S$의 구성으로 가능한 모든 경우의 수를 출력한다.</p> <p>출력이 32비트 정수형 타입의 표현 범위를 초과할 수 있으므로 언어에 따라 아래와 같은 적절한 64비트 정수형 타입을 이용하여 출력해야 한다.</p> <ul> <li>C/C++: long long</li> <li>JAVA: long</li> <li>Kotlin: Long</li> </ul> ## 풀이 모든 핸들이 다르니 첫 문자로 개수를 세주었습니다. 팀 이름이 3글자이기 때문에 case-work로도 조합수를 쉽게 찾을 수 있습니다. ``` c++ #include<bits/stdc++.h> using namespace std; typedef long long ll; ll cnt[26]; int main() { ios::sync_with_stdio(0); cin.tie(0); string s; int n; cin >> s >> n; while(n--) { string handle; cin >> handle; cnt[handle[0]-'A']++; } ll res=1; for(int i=0;i<3;i++) res *= cnt[s[i]-'A']--; if(s[0]==s[1] && s[1]==s[2]) res/=6; else if(s[0]==s[1] || s[0]==s[2] || s[1]==s[2]) res/=2; cout << res; } ```