https://www.acmicpc.net/problem/2671
2671번: 잠수함식별
입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 "SUBMARINE"을 출력하고
www.acmicpc.net
솔루션
많이 틀렸다... 단순 구현문제라고 생각이 드는데.. 요즘 구현이 많이 약해지고, 뇌도 딱딱해져서 문제 풀기가 어렵다..
먼저 나는 조건문을 다 놔눴는데..(조건많은 분기...ㅋ)
문자의 시작이 1이면, 무조건 0이 두개이상 나와야 하고
그 이후에 1이 한개 이상 나와야 한다. (이것은 조건문을 통과한 뒤, while문을 통해 증가시켰다.)
그리고 만약 문자의 시작이 0이라면,
두가지의 경우로 나누었다.
첫번째의 경우 (문자열의 시작이 1이라는 조건문에서) 1이 한개 이상 나오는 경우 1을 다 세었는데, 현재 0이라면
1'0'0으로 이어질 수 있는 것이다. 따라서 이 조건을 통과 시키기 위해 X1'0'0 에서 X자리는 무조건 1이여야, 문자열의 시작이 1이라는 조건문이 통과 될 수 밖에 없다.
두번째의 경우 그 다음 숫자가 '1'이라면 인덱스를 증가 시키고 계속한다.
만약 이 조건문 중 어느것도 통과하지 못한다면 noise라고 판단 하였다.
코드
#include <iostream>
using namespace std;
string str;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> str;
str.push_back('#');
str.push_back('#');
bool is_noise = false;
for (int i = 0; i < str.size()-2; i++) {
if (str[i] == '1') {
if (str[i + 1] == '0' && str[i + 2] == '0') {
i++;
while (str[i] == '0') i++;
if (str[i] == '1') {
while (str[i + 1] == '1')i++;
continue;
}
}
is_noise = true;
break;
}
else if(str[i]=='0') {
if (str[i + 1] == '0' && i - 2 >= 0 && str[i - 1] == '1' && str[i-2] =='1') {
i -= 2;
continue;
}
else if (str[i + 1] == '1') {
i += 1;
continue;
}
is_noise = true;
break;
}
}
is_noise ? (cout << "NOISE\n") : (cout << "SUBMARINE\n");
}
'백준' 카테고리의 다른 글
C++[백준]2143번 두 배열의 합 (0) | 2023.02.12 |
---|---|
C++[백준]1933번 스카이라인 (0) | 2023.02.12 |
C++[백준]2669번 직사각형 네개의 합집합의 면적 구하기 (0) | 2023.02.10 |
C++[백준]2668번 숫자고르기 (0) | 2023.02.10 |
C++[백준]17266번 어두운 굴다리 (0) | 2023.02.09 |