해결방법
입력되는 단어에서 특정 단어(예 : stone)가 포함되어 있는지를 파악해야 한다. 이 특정 단어는 _로 구분되어 있다면 해당하는 단어이지만(stone_axe 등등), 어떤 단어에 포함되는 경우에는 해당하지 않는다(flintstone 등등).
두번째 줄부터 아이템의 이름과 수량이 입력되는데, 이때 입력되는 문자열을 StringStream을 이용하여 입력 스트림처럼 변환해주었다.
그다음으로 활용하는 것은 getline 메서드인데, 코드를 보면 ss, 즉 우리가 입력받은 아이템의 스트림을 word에 저장하는데, _가 나올때까지 읽어들인다는 의미이다.
즉, stone이 우리가 찾는 이름이고, star_shape_stained_stone이 입력받은 단어라면, star, shape, stained, stone을 입력받게 된다.
getline은 while 반복문의 조건으로 설정되어 있고, 만약 우리가 저 getline메서드를 통해 문자열이 저장되는 word가 S, 즉 우리가 찾는 단어와 일치한다면 found를 true로 전환하고 while 반복문을 탈출하게 된다.
정답 코드
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
int N, total = 0;
string S;
cin >> N >> S;
for (int i = 0; i < N; ++i)
{
string item;
int quant;
cin >> item >> quant;
stringstream ss(item);
string word;
bool found = false;
while (getline(ss, word, '_'))
{
if (word == S)
{
found = true;
break;
}
}
if (found)
{
total += quant;
}
}
cout << total << endl;
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 단어 정렬 1181 (0) | 2024.12.04 |
---|---|
BOJ - 생일 5635 (0) | 2024.12.02 |
BOJ - 행렬 곱셈 2740 (0) | 2024.11.25 |
BOJ - 연도 진행바 1340 (0) | 2024.11.23 |
BOJ - 나무 조각 2947 (0) | 2024.11.22 |