답은 알고리즘 뿐이야!

[BOJ 16288] Passport Control (ICPC 2018) 본문

알고리즘/백준문제풀이

[BOJ 16288] Passport Control (ICPC 2018)

skyde47 2019. 10. 4. 02:13

문제 출처 : https://www.acmicpc.net/problem/16288

 

풀이 :

 

K개 이하의 서로다른 증가수열을 구성할 수 있는지를 묻는 문제입니다.

K개 만큼의 수열을 구성하고 K개의 순열 중 현재 값보다 작으면서 최대의 값을 현재 값으로 바꾸면서 수열을 구성하면 됩니다.

수열의 갯수가 K개를 넘어가는 순간 NO를 출력하고

수열의 갯수가 K개 이하가 되면 YES를 출력합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
 
int n, k, arr[100], karr[100], max, idx;
 
int main()
{
    scanf("%d %d"&n, &k);
 
    for (int i = 0; i < n; i++)
    {
        scanf("%d"&arr[i]);
        max = idx = -1;
        for (int j = 0; j < k; j++)
        {
            if (!karr[j]&&max==-1)
            {
                karr[j] = max = arr[i];
                break;
            }
            if (arr[i] > karr[j])if (max < karr[j])
            {
                idx = j;
                max = karr[j];
            }
        }
        if(idx!=-1)karr[idx] = arr[i];
        if (max==-1)
        {
            printf("NO");
            return 0;
        }
    }
    printf("YES");
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

'알고리즘 > 백준문제풀이' 카테고리의 다른 글

[BOJ 16283] Farm (ICPC 2018)  (0) 2019.10.04
[BOJ 16287] Parcel (ICPC 2018)  (0) 2019.10.04
[BOJ 2343] 기타 레슨  (0) 2019.09.26
[BOJ 5430] AC  (0) 2019.09.05
[BOJ 11055] 가장 큰 증가 부분 수열  (0) 2019.09.05
Comments