문제
고대 미스테리로 전해지는 여우의 울음소리를 밝혀내기 위해 한신이는 고성능 녹음기로 무장하고 숲으로 들어갔다. 하지만 숲에는 동물들이 가득해, 녹음된 음성에는 다른 동물들의 울음소리가 섞여 있다. 그러나 한신이는 철저한 준비를 해 왔기 때문에 다른 동물들이 어떤 울음소리를 내는지 정확히 알고 있다. 그러므로 그 소리를 모두 걸러내면 남은 잡음은 분명히 여우의 울음소리일 것이다.
입력
첫 번째 줄에는 테스트케이스의 개수 T가 입력된다. 각 테스트케이스는 아래와 같이 구성되어 있다.
테스트케이스의 첫 줄에는 몇 개의 단어로 이루어진 녹음된 소리가 입력된다. 단어는 알파벳 소문자로만 이루어져 있으며 공백으로 구분된다. 단어의 길이는 최대 100글자이고, 단어의 개수는 최대 100개이다. 다음 줄부터는 여우를 제외한 동물들의 울음소리가 <동물> goes <소리>의 형태로 입력된다. 최소 1마리, 최대 100마리이며, 이름은 최대 100글자이고 실제로 존재하는 동물의 이름이다. 여우를 제외한 동물의 울음소리는 한 단어이고 최대 100글자이다.
마지막 줄에는 한신이가 알고 싶어하는 질문이 주어진다. what does the fox say?
출력
각 테스트케이스마다 여우의 울음소리를 한 줄씩, 녹음된 순서대로 출력한다. 여우의 울음소리가 녹음되어 있음이 보장된다. (알려진 것과는 달리, 여우는 모스 부호로 의사소통하지 않는다.)
1. getline()
공백을 입력 받을 때 사용
cin 먼저 사용하고 받을 시에 , cin은 입력 후 엔터의 \n가 버퍼에 남으므로 그 이후 getline은 엔터만 받고 종료됨
따라서 버퍼를 위한 getline()하나 더 두고 해야 함.
2. 공백 기준으로 구분 법.
공백이 나올 때 까지 하나의 string에 모아줌. 그리고 공백일 때 해당 string으로 처리해 주고 다시 clear
마지막 문자열은 뒤로 공백이 더이상 안나오므로 반복문 밖에서 처리.
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
map<string,bool> m;
int main(void)
{
int test_case;
cin >> test_case;
string flush_buffer;
getline(cin, flush_buffer);
for(int i = 0; i < test_case; i++)
{
string str;
getline(cin,str);
bool check = false;
while(1)
{
string temp;
getline(cin,temp);
for(int j = 0; j <temp.size(); j++)
{
if(temp[j] == 's' && temp[j+1] == 'a' && temp[j+2] == 'y')
{
check = true;
break;
}
}
if(check)
{
break;
}
string a;
for(int j = temp.size()-1; j >= 0; j--)
{
if(temp[j] == ' ')
{
reverse(a.begin(),a.end());
m[a] = true;
a.clear();
break;
}
a += temp[j];
}
}
string result;
vector<string> stvec;
for(int j = 0; j < str.size(); j++)
{
if(str[j] == ' ')
{
if(!m[result])
{
stvec.push_back(result);
}
result.clear();
}
else
{
result += str[j];
}
}
if(!m[result])
{
stvec.push_back(result);
result.clear();
}
for(int j = 0; j < stvec.size(); j++)
{
cout << stvec[j]<<" ";
}
cout << endl;
}
}
'Algorithm' 카테고리의 다른 글
백준 14500번 테트로미노 ( 삼성 기출) (0) | 2020.02.09 |
---|---|
백준 14499번 주사위 굴리기 (삼성 기출) (0) | 2020.02.08 |
백준 16236번 아기 상어 (삼성 기출) (0) | 2020.02.02 |
백준 17142번 연구소3 (삼성 기출) (0) | 2020.02.01 |
백준 14890번 경사로 (삼성 기출) (0) | 2020.01.29 |