본문 바로가기
PS 문제 풀이/SWEA

[SWEA] 1540 좋은 문자열

by 까망 하르방 2021. 2. 24.
반응형

출처: SWEA

 Input 

7

ZGBG

X

EE

AAB

AABA

AABB

BCBABCC

 

 Output 

GOOD

GOOD

GOOD

GOOD

GOOD

BAD

BAD

 

① 각 문자열로 D-쌍 구합니다.

    쌍은 두 문자로 구성되어 있으므로 left, right 변수 이용

② D-쌍에서 D-유일 여부를 판단합니다.

    쌍과 마찬가지로 유일성 여부를 판단하기 위해서는 left와 right 변수 활용


#include <iostream>
using namespace std;
string str;
 
 
bool isUnique(int left, int right, int distance) {
    // 서로 같은 문자열이 있는지 확인
    int l = 0, r;
    while (true) {
        r = l + distance;
        // D_pair[]의 모든 원소를 찾은 경우
        if (r >= str.length())
            break;
        
        if(l == left && r == right){
            l++;
            continue;
        }
 
 
        if(str[l] == str[left] && str[r] == str[right])
            return false;
 
 
        l++;
    }
    return true;
}
 
 
bool isGood(string str) {
    // 주어진 문자열 길이가 L일 때, D-쌍의 개수 = L-1
    // ex) L = 4일 때, D-쌍의 개수 4 - 1 = 3
    int left, right;
    for (int distance = 1; distance < str.length(); distance++) {
        left = 0;
        while (true) {
            right = left + distance;
            if (right >= str.length())
                break;
 
 
            if(!isUnique(left, right, distance))
                return false;
            left++;
        }
    }
    return true;
}
 
 
int main() {
    int testCase; cin >> testCase;
 
 
    for (int tc = 1; tc <= testCase; ++tc) {
        cin >> str;
        if (isGood(str)) cout << "GOOD" << endl;
        else cout << "BAD" << endl;
    }
}

 

반응형

'PS 문제 풀이 > SWEA' 카테고리의 다른 글

[SWEA] 3456 직사각형 길이 찾기  (0) 2021.02.24
[SWEA] 3431 준환이의 운동관리  (0) 2021.02.24
[SWEA] 3499 퍼펙트 셔플  (0) 2021.02.24
[SWEA] 3750 Digit sum  (0) 2021.02.24
[SWEA] 9092 마라톤  (0) 2021.02.24

댓글