https://www.acmicpc.net/problem/10173
1. 문제
영어 문장속 숨어있는 니모(Nemo)를 찾아보자. 니모를 찾는데 있어서 대소문자는 중요하지 않다.
2. 입력
여러 문장이 각 줄로 입력되며, 입력의 마지막에는 "EOI" 입력된다. 한 줄은 최대 80개의 글자로 이루어져 있다.
3. 출력
숨겨진 니모를 찾으면 “Found”, 못찾으면 “Missing”를 각 줄에 맞게 출력하면 된다.
4. C++ 코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
char ans[] = { 'N','E','M','O','n','e','m','o' };
while (1) {
string str;
getline(cin, str);
if (str == "EOI") {
break;
}
int cnt = 0;
for (int i = 0; i < str.size() - 3; ++i) {
if (str[i] == 'N' || str[i] == 'n') {
string strNemo = str.substr(i, 4);
for (int j = 0; j < strNemo.size(); ++j) {
for (int k = 0; k < sizeof(ans) / sizeof(char); ++k) {
if (strNemo[j] == ans[k]) {
++cnt;
}
}
}
if (cnt == 4) {
cout << "Found\n";
break;
}
else {
cnt = 0;
}
}
}
if (cnt == 0) {
cout << "Missing\n";
}
}
return 0;
}
5. 문제 풀이
주어진 문제는 각 문장마다 '니모(Nemo)'라는 단어를 대소문자 구분없이 찾는 것이다. 먼저 니모에 해당하는 대소문자가 존재하는지를 확인하기 위하여 이를 저장하는 char ans[] = { 'N','E','M','O','n','e','m','o' }; 배열을 만들었다. 다음으로 각 문장마다 '니모'라는 문자가 존재하는지만 찾으면 된다. 이를 찾는 방법은 다음과 같다.
먼저 EOI문장을 입력받을 때까지 문장을 계속 입력 받아야 하므로 while문을 이용하고, 공백을 포함하여 입력을 받을 수 있도록 getline()함수를 사용하였다. 니모는 총 4개의 알파벳으로 구성되므로, 반복문에서 4개의 니모에 해당하는 알파벳이 대소문자 구분없이 4번 연속으로 확인되면 된다. 반복문을 돌다가 문자 'N', 'n'이 발견되면 문자 'N', 'n'에 해당하는 인덱스부터 부분문자열을 만드는 함수를 이용하여 다음과 같이 코드를 작성하였다.
string strNemo = str.substr(i, 4);
위에서 언급한 부분문자열 부터 니모에 해당하는 알파벳이 연속으로 나오는지 확인하기 위하여 카운트를 세는 cnt 변수를 0으로 초기화 하여 4가 되면 Found를 출력, 아닐 경우 다시 cnt 변수에 0을 할당해준다. 위 조건을 모두 확인한 후의 결과인 cnt가 0이 되면 Missing을 출력하도록 하였다. EOI의 경우 처음 입력받은 문장이 EOI이면 break를 걸어 프로그램을 종료하도록 하였다.
'Koala - 8기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] 5597번: 과제 안 내신 분..? (0) | 2022.09.18 |
---|---|
[백준/Python] 16430 -제리와 톰 (0) | 2022.09.18 |
[백준/python] 2908번 상수 (0) | 2022.09.17 |
[백준/Python] 10430 - 나머지 (0) | 2022.09.11 |
[백준 / C++] 2869. 달팽이는 올라가고 싶다. (0) | 2022.09.11 |