문제
고대 미스테리로 전해지는 여우의 울음소리를 밝혀내기 위해 한신이는 고성능 녹음기로 무장하고 숲으로 들어갔다. 하지만 숲에는 동물들이 가득해, 녹음된 음성에는 다른 동물들의 울음소리가 섞여 있다. 그러나 한신이는 철저한 준비를 해 왔기 때문에 다른 동물들이 어떤 울음소리를 내는지 정확히 알고 있다. 그러므로 그 소리를 모두 걸러내면 남은 잡음은 분명히 여우의 울음소리일 것이다.
입력
첫 번째 줄에는 테스트케이스의 개수 T가 입력된다. 각 테스트케이스는 아래와 같이 구성되어 있다.
테스트케이스의 첫 줄에는 몇 개의 단어로 이루어진 녹음된 소리가 입력된다. 단어는 알파벳 소문자로만 이루어져 있으며 공백으로 구분된다. 단어의 길이는 최대 100글자이고, 단어의 개수는 최대 100개이다. 다음 줄부터는 여우를 제외한 동물들의 울음소리가 <동물> goes <소리>의 형태로 입력된다. 최소 1마리, 최대 100마리이며, 이름은 최대 100글자이고 실제로 존재하는 동물의 이름이다. 여우를 제외한 동물의 울음소리는 한 단어이고 최대 100글자이다.
마지막 줄에는 한신이가 알고 싶어하는 질문이 주어진다. what does the fox say?
출력
각 테스트케이스마다 여우의 울음소리를 한 줄씩, 녹음된 순서대로 출력한다. 여우의 울음소리가 녹음되어 있음이 보장된다. (알려진 것과는 달리, 여우는 모스 부호로 의사소통하지 않는다.)
접근 방식
문제가 어렵다기 보다는 c++에서 문자열 입력을 cin으로 받는데
cin은 공백을 기준으로 문자열을 받다보니 한줄입력을 어떻게 받아서 처리하는지가 관건이였다
찾아보니 c++ 에서는 getline을 사용해 한줄 입력을 받는다
사용법은 다음과 같다
string s;
cin.ignore();
getline(cin,s);
cin.ignore() 코드의 경우 이전에 cin으로 문자열을 입력받으면 '\n'이 버퍼에 남아있기 때문에 이를처리해주기 위한 코드이다!
근데 이렇게 한줄을 받았는데 이를 어떻게 쪼개서 저장할 지가 고민이였다
처음에 생각한 방법은 공백을 기준으로 저장할 생각이였는데 찾아보니까
c++에서는 stringstream이라는 클래스를 제공해준다! (기특한 C++)
stringstream을 사용해 문자열에서 내가 원하는 자료형의 데이터를 추출할 수 있다!
사용법은 다음과 같다
stringstream ss(s);
string str;
while(ss >> str) {
cout<<str<<'\n';
}
이렇게 하면 공백을 기준으로 문자열을 뽑아낼 수 있다!
아주 편리하군~.~
전체 코드
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false); cin.tie(0);
int T; cin>>T;
cin.ignore();
while(T--) {
vector<string> v;
unordered_map<string,bool> m;
string line,sound,str,animal,tmp;
getline(cin, line);
stringstream stream(line);
while(stream>>sound) {
v.push_back(sound);
}
while(true) {
getline(cin,line);
if(line == "what does the fox say?") break;
stringstream str(line);
str>>animal>>tmp>>sound;
m[sound] = true;
}
for(auto ss : v) {
if(!m[ss]) cout<<ss<<" ";
}
}
}
처음에는 문자열 때문에 헤맸지만
덕분에 stringstream과 getline을 또 새롭게 알아가게 되어서 좋다!
'Algorithm' 카테고리의 다른 글
[BOJ] 요세푸스 문제 1158번 C++ (1) | 2024.01.13 |
---|---|
[BOJ] 에디터 1406번 C++ (1) | 2024.01.09 |
[BOJ] 스타트와 링크 14889번 C++ (1) | 2023.12.19 |
[BOJ] 숨바꼭질 3 13549번 C++ (0) | 2023.12.10 |
[BOJ] 쿼드트리 1992번 c++ (0) | 2023.08.02 |