티스토리 뷰

https://codeforces.com/contest/1680

 

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

 

codeforces.com

!!!! 모든 답은 제 풀이일 뿐 공부를 위한 올바른 정해가 아닐 수 있습니다 !!!!

 

A. Minimums and Maximums

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

 

Problem - A - Codeforces

 

codeforces.com

문제

 

l1과 r1 , l2와 r2가 주어진다. 한 배열에서 최소 원소의 개수가 l1 ~ r1개 이고, 최대 원소의 개수가 l2~r2개 인 조건을 만족하는 최소 배열 원소의 수를 출력하는 문제

 

풀이

 

두 범위가 겹친다면 겹치는 구간의 최소 값을 출력해주면 되고, 아니라면 l1+l2 값을 출력해주면 된다.

 

 

코드

 

    #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--) {
            int l1, r1, l2, r2;
            cin >> l1 >> r1 >> l2 >> r2;
            int maxl = max(l1, l2), minr = min(r1, r2);
            if (maxl <= minr) cout << maxl << '\n';
            else cout << l1 + l2 << '\n';
        }
    }

 

B. Robots

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

 

Problem - B - Codeforces

 

codeforces.com

문제

 

n,m 필드가 주어진다. E와 R로 이루어져 있고 E는 빈 공간 R은 로봇이다. 동시에 모든 로봇에게 4방향 이동하는 명령을 할 수 있을 때, 가장 왼쪽 위 셀을 로봇으로 채울 수 있으면 YES 아니라면 NO를 출력하는 문제 단 한 로봇이라도 필드 밖으로 나가면 안된다.

 

풀이

 

n , m 범위가 5이므로 각 로봇당 제일 왼쪽 위로 가는 경우를 계산해서 한 로봇이라도 가능하면 YES 아니라면 NO를 출력해주면 된다.

 

 

코드

 

    #include <bits/stdc++.h>
    using namespace std;
    string s[5];
    vector<pair<int, int>> v;
    int main() {
        ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
        int T;
        cin >> T;
        while (T--) {
            v.clear();
            int n, m;
            cin >> n >> m;
            for (int i = 0; i < n; i++) {
                cin >> s[i];
                for (int j = 0; j < m; j++) {
                    if (s[i][j] == 'R')v.push_back({ i,j });
                }
            }
            bool flag = false;
            for (int pos = 0; pos < v.size(); pos++) {
                bool tflag = true;
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        if (s[i][j] == 'R') {
                            if ((i - v[pos].first) < 0 || (j - v[pos].second) < 0) {
                                tflag = false;
                                break;
                            }
                        }
                    }
                }
                if (tflag) {
                    flag = true;
                    break;
                }
            }
            if (flag)cout << "YES\n";
            else cout << "NO\n";
        }
    }

 

 

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

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