반응형
https://www.acmicpc.net/problem/2671
2671번: 잠수함식별
입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 "SUBMARINE"을 출력하고
www.acmicpc.net

[ 문제풀이 ]
1. 문자열 str을 입력받습니다.
2. 0번 인덱스부터 탐색을 시작해서 1로 시작하면 뒤에 0의 개수가 2개 이상, 1의 개수가 1개 이상이면 그다음 인덱스를 리턴합니다.
3. 0으로 시작하면 뒤에 1이 오면 다음 인덱스를 리턴하고, 0이 오면 한 칸 앞의 인덱스와 두 칸 앞의 인덱스가 1이라면 다음 인덱스를 리턴합니다.
4. 하나라도 만족하지 않는다면 NOISE를 출력하고, 아니라면 SUBMARINE을 출력합니다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include<iostream> #include<string> using namespace std; string str; int check(int cur) { if (str[cur] == '1') { int cnt = 0; cur++; while (1) { if (str[cur] == '0') { cur++; cnt++; } else break; } if (cnt < 2) { return -1; } cnt = 0; while (1) { if (str[cur] == '1') { cur++; cnt++; } else break; } if (cnt > 0) { return cur; } else { return -1; } } else { if (str[cur + 1] == '1') { return cur + 2; } else if (str[cur + 1] == '0' && str[cur - 1] == '1' && str[cur - 2] == '1') { return cur - 1; } } return -1; } int main() { cin >> str; int cur = 0; while (1) { if (cur >= str.size()) { printf("SUBMARINE"); return 0; } cur = check(cur); if (cur == -1) { printf("NOISE"); return 0; } } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 2513번 - 통학버스 (C++) (0) | 2023.04.27 |
---|---|
[ 백준 ] 9370번 - 미확인 도착지 (C++) (0) | 2023.04.26 |
[ 백준 ] 17218번 - 비밀번호 만들기 (C++) (0) | 2023.04.24 |
[ 백준 ] 6987번 - 월드컵 (C++) (0) | 2023.04.23 |
[ 백준 ] 11000번 - 강의실 배정 (C++) (0) | 2023.04.22 |