tuple<string, string, string>
- 제목
다중 항목 선호도 조사 (Small)
- 조건
시간 제한 : 1 초
메모리 제한 : 512 MB
- 문제
n명의 학생에게 다음과 같이 선호도를 조사하였다. 각 학생은 아래 세 가지 조사 항목 각각에 대하여 반드시 1가지를 선택해야 한다.
좋아하는 과목(subject)에 'kor', 'eng', 'math' 중 하나를 선택
좋아하는 과일(fruit)에 'apple', 'pear', 'orange' 중 하나를 선택
좋아하는 색깔(color)에 'red', 'blue', 'green' 중 하나를 선택
n명 학생의 선호도에 대하여 m개의 질의를 순서대로 처리하자. 하나의 질의는 다음과 같다.
질의 형식은 'subject fruit color'이다.
subject은 'kor', 'eng', 'math', '-' 중 하나이다.
fruit은 'apple', 'pear', 'orange', '-' 중 하나이다.
color는 'red', 'blue', 'green', '-' 중 하나이다.
'-' 표시는 해당 조건을 고려하지 않겠다는 의미이다.
n명 학생 중 선호도가 subject fruit color와 일치하는 학생 수를 출력한다.
n명 학생의 선호도와 m개의 질의가 주어 지면, m개의 질의를 순서대로 처리하자.
- 입력
첫 번째 줄에 n과 m이 공백을 사이에 두고 순서대로 주어진다.
두 번째 줄부터 n개의 줄에 학생들의 선호도가 주어진다. 한 줄에 한 학생의 선호도가 주어진다. 한 학생의 선호도는 학생이 좋아하는 과목, 과일, 색깔을 공백을 사이에 두고 순서대로 주어진다.
다음 줄부터 m개의 줄에 질의가 주어진다. 한 줄에 하나의 질의가 주어진다. 하나의 질의는 과목, 과일, 색깔을 공백을 사이에 두고 순서대로 주어진다.
- 출력
첫 번째 줄부터 m개의 줄에 질의 결과를 순서대로 출력한다. 한 줄에 하나의 질의 결과를 나타내는 정수를 출력한다.
예제 입력1 | 예제 출력1 |
5 4 kor apple red kor pear blue eng apple red eng orange blue math apple green kor apple red kor - blue eng - - - - red |
1 1 2 2 |
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <tuple>
using namespace std;
#define endl '\n'
#define fastio ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
bool sameCheck(string std_str, string val){
if(std_str == "-") return true;
if(std_str == val) return true;
return false;
}
bool check(tuple<string, string, string> _std, string subject, string fruit, string color){
if(sameCheck(subject, get<0>(_std)) && sameCheck(fruit, get<1>(_std)) && sameCheck(color, get<2>(_std))) return true;
return false;
}
int main() {
fastio;
string subject, fruit, color;
vector<tuple<string, string, string>> vec;
int sz_stu, sz_ques;
cin >> sz_stu >> sz_ques;
for(int n = 0 ; n < sz_stu ; n++){
cin >> subject >> fruit >> color;
vec.push_back(make_tuple(subject, fruit, color));
}
for(int n = 0 ; n < sz_ques ; n++){
cin >> subject >> fruit >> color;
int cnt = 0;
for(int m = 0 ; m < vec.size() ; m++){
if(check(vec[m], subject, fruit, color)) cnt++;
}
cout << cnt << endl;
}
return 0;
}
'Problem Solving > BaekJoon' 카테고리의 다른 글
[BOJ/백준] 2623 - 음악프로그램 (0) | 2022.09.13 |
---|---|
[BOJ/백준] 1922 - 네트워크 연결 (0) | 2022.09.12 |
[BOJ/백준] 25286 - 11월 11일 (0) | 2022.09.11 |
[BOJ/백준] 25501 - 재귀의 귀재 (0) | 2022.09.10 |
[BOJ/백준] 25371 - k진수 정수의 자릿수 나누기 (0) | 2022.09.08 |