9342번: 염색체
상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙
www.acmicpc.net
[문제 풀이]
구현을 이용하여 문제를 풀었습니다.
이 문제는 아래의 조건을 만족해야 합니다.
- 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 시작해야 한다.
- 그 다음에는 A가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 F가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 C가 하나 또는 그 이상 있어야 한다.
- 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 끝나야 한다.
따라서, 아래와 같은 조건을 검사하는 형태로 코드를 구현하였습니다.
- 문자의 처음과 끝에 등장하는 문자가 {A, B, C, D, E, F} 중 1개 이상 포함하지 않으면 Good을 출력합니다.
- 위의 조건을 통과할 경우 앞뒤의 문자가 같은지를 비교합니다.
- 다른 경우 전 문자가 A, F, C 문자인가를 확인하고 문자열 처리를 해줍니다.
- 위의 조건을 만족하지 못한다면 Good을 출력하고 만족한다면 infected! 를 출력합니다.
[코드]
#include<iostream>
#include<string>
using namespace std;
int T;
int main() {
cin >> T;
for (int i = 0; i < T; i++) {
string str;
cin >> str;
int L = str.size();
bool check = false;
if (str.at(0) == 'A' || str.at(0) == 'B' || str.at(0) == 'C' || str.at(0) == 'D' || str.at(0) == 'E' || str.at(0) == 'F')
check = true;
if (!check) {
cout << "Good" << endl;
continue;
}
check = false;
if (str.at(L - 1) == 'A' || str.at(L - 1) == 'B' || str.at(L - 1) == 'C' || str.at(L - 1) == 'D' || str.at(L - 1) == 'E' || str.at(L - 1) == 'F')
check = true;
if (!check) {
cout << "Good" << endl;
continue;
}
char temp = 'S';
for (int j = 1; j < str.size() - 1; j++) {
if (str.at(j - 1) != str.at(j)) {
if (str.at(j - 1) == 'B' || str.at(j - 1) == 'D' || str.at(j - 1) == 'E') {
if (temp == 'S' && str.at(j) == 'A') {
temp = 'A';
}
else {
check = false;
cout << "Good" << endl;
break;
}
}else if (str.at(j - 1) == 'A') {
if ((temp == 'S' || temp == 'A') && str.at(j) == 'F') {
temp = 'F';
}
else {
check = false;
cout << "Good" << endl;
break;
}
}
else if (str.at(j - 1) == 'F') {
if (temp == 'F' && str.at(j) == 'C') {
temp = 'C';
}
else {
check = false;
cout << "Good" << endl;
break;
}
}
else if (str.at(j - 1) == 'C') {
if (temp == 'C' && (str.at(j) == 'A' || str.at(j) == 'B' || str.at(j) == 'C' || str.at(j) == 'D' || str.at(j) == 'E' || str.at(j) == 'F')) {
}
else {
check = false;
cout << "Good" << endl;
break;
}
}
else {
check = false;
cout << "Good" << endl;
break;
}
}
}
if (check)
cout << "Infected!" << endl;
}
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 16395_파스칼의 삼각형(C++) (0) | 2020.10.23 |
---|---|
백준 1260_DFS와 BFS(C++) (0) | 2020.10.21 |
백준 1927_최소 힙(C++) (0) | 2020.10.18 |
백준 11279_최대 힙(C++) (0) | 2020.10.18 |
백준 10845_큐(C++) (0) | 2020.10.17 |