본문 바로가기
Develop/백준 (Cpp)

[백준] 9342번 : 염색체 (C++)

by Tarra 2023. 9. 15.

9342번 : 염색체


문제)

상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙을 만족하는지 검사해야 한다.

  • 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 시작해야 한다.
  • 그 다음에는 A가 하나 또는 그 이상 있어야 한다.
  • 그 다음에는 F가 하나 또는 그 이상 있어야 한다.
  • 그 다음에는 C가 하나 또는 그 이상 있어야 한다.
  • 그 다음에는 {A, B, C, D, E, F} 중 0개 또는 1개가 있으며, 더 이상의 문자는 없어야 한다.

문자열이 주어졌을 때, 위의 규칙을 만족하는지 구하는 프로그램을 작성하시오.

 

 

 

입력 :

첫째 줄에 테스트 케이스의 개수 T ≤ 20 이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 최대 200개의 알파벳 대문자로 이루어진 문자열이 주어진다.

 

 

 

 

출력 :

각 테스트 케이스에 대해서, 문제의 규칙을 지키는 문자열인 경우에는  "Infected!"를, 아닌 경우에는 "Good"을 출력한다.

 

 

 

 

 

풀이)

 

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// 9342. 염색체
#include <iostream>
#include <string>
 
using namespace std;
 
int alpha['z' - 'a' + 1];
 
bool check1(string word)
{
    char t = word[0];
 
    if(t == 'A'
    || t == 'B'
    || t == 'C'
    || t == 'D'
    || t == 'E'
    || t == 'F' ) return true;
    return false;
}
 
bool check2(string word)
{
    bool flag1 = 0;
    bool flag2 = 0;
    bool flag3 = 0;
 
    for (int i = 0; i < word.length(); i++)
    {
        if (i > 0 && !(word[i] == 'A' || word[i] == 'F' || word[i] == 'C'))
        {
            return false;
        }
 
        if (word[i] == 'A')
        {
            flag1 = 1;
        }
        else if (word[i] == 'F' && flag1)
        {
            flag2 = 1;
        }
        else if (word[i] == 'C' && flag1 && flag2)
        {
            flag3 = 1;
        }
    }
 
    return flag3;
}
 
bool check3(string word)
{
    char t = word[word.length() - 1];
 
    if (t == 'A'
        || t == 'B'
        || t == 'C'
        || t == 'D'
        || t == 'E'
        || t == 'F'return true;
    return false;
}
 
int main()
{
    int t;
    cin >> t;
    string temp;
    while (t--)
    {
        cin >> temp;
 
        if (check1(temp) && check2(temp) && check3(temp))
        {
            cout << "Infected!\n";
        }
        else
        {
            cout << "Good\n";
        }
    }
 
    return 0;
}
 
 
cs

출처 : https://www.acmicpc.net/problem/9342 

 

9342번: 염색체

상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙

www.acmicpc.net