Algorithm/Greedy Algorithm

[BOJ 2891] S5 카약과 강풍 {C++}

surimi🍥 2022. 6. 29. 18:52
반응형

2891번: 카약과 강풍

 

2891번: 카약과 강풍

첫째 줄에 팀의 수 N, 카약이 손상된 팀의 수 S, 카약을 하나 더 가져온 팀의 수 R이 주어진다. (2 ≤ N ≤ 10, 1 ≤ S, R ≤ N) 둘째 줄에는 카약이 손상된 팀의 번호가 주어진다. 팀 번호는 중복되지 않

www.acmicpc.net

C++

  • 좀 더 세련된 풀이를 하고싶었지만 귀차니즘은 이길 수 없었다!
#include <iostream>
using namespace std;

int main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N, S, R, K;
    cin >> N >> S >> R;

    /*************************************
    N : 팀의 수 (2 ≤ N ≤ 10)
    S : 카약이 손상된 팀의 수 (1 ≤ S)
    R : 카약을 하나 더 가져온 팀의 수 (R ≤ N)
    K : 카약을 하나 더 가져온 팀 번호.
    **************************************/

    int s[S];
    // 카약이 고장난 팀을 저장할 배열
    for (int i = 0; i < S; i++)
        cin >> s[i];

    // 카약을 하나 더 가져온 팀을 하나씩 받으며
    for (int i = 0; i < R; i++)
    {
        cin >> K;
        // 같은 팀 번호를 우선적으로 배정하고
        for (int j = 0; j < S; j++)
            if (s[j] == K) 
            {
                S--;
                s[j] = 99;
                K = 999;
                break;
            }
        // 양 옆팀 중에 부서진 팀이 있다면 배정.
        for (int c : s)
            if (abs(c - K) < 2) 
            {
                S--;
                break;
            }
    }
    cout << (S < 0 ? 0 : S);
}
반응형