본문 바로가기

백준

17300 패턴

 

으으 조금 더 깔끔하게 짤 수 있을 것 같은데 생각이 안 난다. 그래서 조건 하나하나 확인 했다,,

이전에 이 문제 본 적 있는데 그 때는 어떻게하지 고민하다가 막혔는데 드디어 해결했네

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

vector<ii> v[10];

int     main()
{
    int n;
    scanf("%d", &n);
    
    vector<int> in(n);
    for (int i = 0; i < n; i++)
        scanf("%d", &in[i]);

    vector<int> check_dup(10);
    v[1].emplace_back(2, 3);
    v[1].emplace_back(5, 9);
    v[1].emplace_back(4, 7);
    
    v[2].emplace_back(5, 8);
    
    v[3].emplace_back(2, 1);
    v[3].emplace_back(5, 7);
    v[3].emplace_back(6, 9);
    
    v[4].emplace_back(5, 6);
    
    v[6].emplace_back(5, 4);
    
    v[7].emplace_back(4, 1);
    v[7].emplace_back(5, 3);
    v[7].emplace_back(8, 9);
    
    v[8].emplace_back(5, 2);
    
    v[9].emplace_back(5, 1);
    v[9].emplace_back(6, 3);
    v[9].emplace_back(8, 7);
    
    for (int i = 0; i < n; i++)
    {
        if (check_dup[in[i]] == 1)
        {
            printf("NO\n");
            return 0;
        }
        
        if (i == n - 1)
            break;
        
        for (int j = 0; j < v[in[i]].size(); j++)
        {
            if (in[i + 1] == v[in[i]][j].yy && check_dup[v[in[i]][j].xx] == 0)
            {
                printf("NO\n");
                return 0;
            }
        }
        check_dup[in[i]] = 1;
    }
    printf("YES\n");
    
    return 0;
}

 

 

 

 

'백준' 카테고리의 다른 글

1568 새  (0) 2021.03.06
16199 나이 계산하기  (0) 2021.03.06
15900 나무 탈출  (0) 2021.02.01
11058 크리보드  (0) 2021.01.10
12738 가장 긴 증가하는 부분 수열 3  (0) 2021.01.10