Algorithm/코드포스

Educational Codeforces Round 123 (Rated for Div. 2) 1670 -> 1589

Edyy 2022. 3. 7. 09:52

https://codeforces.com/contest/1644

 

Dashboard - Educational Codeforces Round 123 (Rated for Div. 2) - Codeforces

 

codeforces.com

 

!!!! 모든 답은 제 풀이일 뿐 정해가 아닐 수 있습니다 !!!!

 

A. Doors and Keys

https://codeforces.com/contest/1644/problem/A

 

Problem - A - Codeforces

 

codeforces.com

 

문제

 

r,g,b,R,G,B로 이루어진 스트링이 주어진다. R,G,B는 문이고 r,g,b는 키이다. 왼쪽부터 순서대로 이동하면서 각 문자열에 맞는 키를 먼저 줍고 모든 문을 열 수 있으면 YES 아니라면 NO를 출력하는 문제

 

풀이

 

각 문자열마다 체크변수를 두어서 계산한다.

 

 

코드

 

    #include <bits/stdc++.h>
    using namespace std;
     
    int main() {
        ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
        int T;
        cin >> T;
        while (T--) {
            string s;
            cin >> s;
            int cntr = 0, cntg = 0, cntb = 0;
            bool flag = true;
            for (int i = 0; i < s.size(); i++) {
                if (s[i] == 'r')cntr++;
                if (s[i] == 'g')cntg++;
                if (s[i] == 'b')cntb++;
                if (s[i] == 'R') {
                    if (cntr != 1) {
                        flag = false;
                        break;
                    }
                }
                if (s[i] == 'G') {
                    if (cntg != 1) {
                        flag = false;
                    }
                }
                if (s[i] == 'B') {
                    if (cntb != 1) {
                        flag = false;
                        break;
                    }
                }
            }
            if (flag)cout << "YES\n";
            else cout << "NO\n";
        }
    }

 

B. Anti-Fibonacci Permutation

https://codeforces.com/contest/1644/problem/B

 

Problem - B - Codeforces

 

codeforces.com

문제

 

n이 주어진다. 길이가 n인 permutation에서 피보나치 수열을 이루지 않는 n개의 서로 다른 permutation을 출력하는 문제

 

풀이

 

n제한이 50이하이므로 next_permutation 함수나 prev_permutation 함수를 사용하여 완전탐색으로 푼다.

 

코드

 

    #include <bits/stdc++.h>
    using namespace std;
    int a[51];
    int main() {
        ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
        int T;
        cin >> T;
        while (T--) {
            int n;
            cin >> n;
            for (int i = 0; i < n; i++)a[i] = n - i;
            int cnt = 0;
            do {
                bool flag = true;
                for (int i = 2; i < n; i++) {
                    if (a[i] == (a[i - 1] + a[i - 2])) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    for (int i = 0; i < n; i++)cout << a[i] << ' ';
                    cout << '\n';
                    cnt++;
                    if (cnt == n)break;
                }
            } while (prev_permutation(a, a + n));
        }
    }

 

자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !

틀린 부분은 감사히 지적받겠습니다.