작성
·
44
0
선생님 안녕하세요! 1-G (9996번)문제를 푸는데 제출 시 정답은 나오는데, 이상해서 질문 드립니다.
http://boj.kr/4afd7adce3774529abedc8229fb51913
해당 코드로 작성을 했는데, vscode에서 실행 후 예시 입력값을 넣고 엔터를 누른뒤 한번 더 엔터를 눌러야 마지막 출력값이 나옵니다.
cin이 개행문자를 만나지 못해서 마지막 입력값이 들어오지 못하는것 같아 getline으로 바꾸고 cin 이후 cin.ignore()이나 clear을 해도 개행문자가 getline으로 들어 오는데, 뭐가 잘못됐는지 모르겠습니다..
답변 1
0
안녕하세요 정현님 ㅎㅎ
코드 잘 짜셨네요.
해당 코드로 작성을 했는데, vscode에서 실행 후 예시 입력값을 넣고 엔터를 누른뒤 한번 더 엔터를 눌러야 마지막 출력값이 나옵니다.
-> 이거는 원래 그럴 때가 있습니다. 제 컴파일러에서는 한번 더 엔터 안눌러도 출력값이 잘 나옵니다.
만약, 입력값 넣고 -> 순차적으로 반드시 출력되는 것을 원한다면 배열에 담고 출력하시면 됩니다.
제가 정현님 코드를 고쳐봤는데요. ㅎㅎ 이렇게 하시면 됩니다.
#include <bits/stdc++.h>
using namespace std;
vector<string> split(string input, string delimiter)
{
vector<string> ret;
long long pos = 0;
string token = "";
while ((pos = input.find(delimiter)) != string::npos)
{
token = input.substr(0, pos);
ret.push_back(token);
input.erase(0, pos + delimiter.length());
}
ret.push_back(input);
return ret;
}
int main()
{
int N;
cin >> N;
string pattern;
cin >> pattern;
string delimiter = "*";
vector<string> part;
part = split(pattern, delimiter);
vector<string> results;
string inputWord;
for (int i = 0; i < N; i++)
{
cin >> inputWord;
if (inputWord.length() < (part[0].length() + part[1].length()))
results.push_back("NE");
else
{
bool count = false;
for (int i = 0; i < part[0].length(); i++)
{
if (part[0][i] != inputWord[i])
{
results.push_back("NE");
count = true;
break;
}
}
for (int i = 0; i < part[1].length(); i++)
{
if (count == true)
break;
if (part[1][part[1].length() - i - 1] != inputWord[inputWord.length() - i - 1])
{
results.push_back("NE");
count = true;
break;
}
}
if (count == false)
results.push_back("DA");
}
}
for (const string& result : results)
{
cout << result << "\n";
}
return 0;
}
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.