※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 9536번 문제인 여우는 어떻게 울지?이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/9536
9536번: 여우는 어떻게 울지?
각 테스트케이스마다 여우의 울음소리를 한 줄씩, 녹음된 순서대로 출력한다. 여우의 울음소리가 녹음되어 있음이 보장된다. (알려진 것과는 달리, 여우는 모스 부호로 의사소통하지 않는다.)
www.acmicpc.net
주어지는 녹음소리를 구성하는 단어들 중 다른 동물들의 울음소리로 사용되는 단어를 제외한 단어들을 (중복을 허용하여) 순차적으로 출력하는 문제이다. 다른 동물의 울음소리로 사용되는 단어는 set 자료구조를 이용하면 편하게 관리할 수 있다.
글쓴이는 우선 getline을 이용해 녹음소리를 줄 단위로 입력받고, ' '를 토큰으로 삼아 주어진 문자열의 단어들을 구분해 녹음소리를 단어의 벡터로 바꿔 저장해두었다.
그 다음 "what does the fox say?" 줄이 입력으로 들어오기 전까지의 줄을 getline을 이용해 입력받고 위와 같은 방법으로 주어진 입력들을 단어단위로 바꾼 뒤 마지막 단어를 다른 동물의 울음소리로 사용되는 단어로 판단해 "다른 동물의 울음소리 단어 집합"을 구하였다.
마지막으로 앞서 구한 녹음소리를 구성하는 단어를 처음서부터 순서대로 읽으면서 다른 동물의 울음소리로 사용되는 단어가 아닌 단어를 발견할 때마다 순서대로 출력해주었다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <set>
#include <vector>
using namespace std;
int T;
string s;
int slen;
vector<string> vec;
set<string> st;
int idx;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
getline(cin, s);
T = stoi(s);
while (T--) {
vec.clear(), st.clear();
getline(cin, s);
s += " ";
slen = s.length();
idx = 0;
for (int i = 0; i < slen; i++) {
if (s[i] == ' ') {
vec.emplace_back(s.substr(idx, i - idx));
idx = i + 1;
}
}
getline(cin, s);
while (s != "what does the fox say?") {
s += " ";
slen = s.length();
idx = 0;
vector<string> tmp;
for (int i = 0; i < slen; i++) {
if (s[i] == ' ') {
tmp.emplace_back(s.substr(idx, i - idx));
idx = i + 1;
}
}
st.insert(tmp.back());
getline(cin, s);
}
for (auto& ss : vec) {
if (!st.count(ss)) cout << ss << ' ';
}
cout << '\n';
}
}
'BOJ' 카테고리의 다른 글
[BOJ 25312 // C++] 200% Mixed Juice! (0) | 2023.02.21 |
---|---|
[BOJ 17478 // C++] 재귀함수가 뭔가요? (0) | 2023.02.21 |
[BOJ 2704 // C++] 이진법 시계 (0) | 2023.02.21 |
[BOJ 25275 // C++] Bar Classification (1) | 2023.02.20 |
[BOJ 9784 // C++] Boiled Eggs (0) | 2023.02.20 |