ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ABC006 D] トランプ挿入ソート
    문제 풀이/AtCoder 2023. 1. 30. 17:13

    난이도: 1696 // 실험적

     

    태그

    더보기
    • Longest Increasing Subsequence
    • Imperfect Time Complexity (당시 정해는 \( O(N \log N) \)으로 추정)

     

    번역

    더보기

    \( N \)개의 카드가 주어집니다. 각각의 카드에는 정수 하나가 쓰여있습니다.

     

    나열된 카드에 아래 작업을 원하는 만큼 적용시킬 수 있습니다.

    • 원하는 카드 한 장을 빼낸 뒤, 원하는 위치에 삽입한다.

     

    카드에 적힌 수가 오름차순이 되도록 하기 위해 실행해야 하는 작업의 최소 횟수를 구하세요.

     

    추가 조건

    두 장 이상의 카드에 같은 수가 적혀있는 경우는 없습니다.

    또한, 카드에 적힌 수는 \( 1 \) 이상 \( N \) 이하입니다.

    즉, 카드에 적힌 숫자들을 나열하면, 순열이 완성됩니다.

     

    풀이

    1. 한 장의 카드에 작업을 여러 번 진행한다면?

    더보기

    사실 이럴 필요 없습니다.

    카드에 추가적인 제약 조건도 없으니, 그냥 처음에 이동시킬 때 원하는 지점으로 이동시키면 되기 때문이죠.

     

    2. 작업을 여러 번 진행한다면?

    더보기

    작업을 \( K \)번 진행한다면, \( K \)장의 카드를 빼낸 뒤 이를 원하는 위치에 삽입하는 형태가 됩니다.

    이 카드들은 우리가 원하는대로 조종할 수 있으므로, 작업을 하지 않는 \( N-K \)장의 카드에 대해 생각해봅시다.

     

    3. 작업이 진행되지 않는 카드들의 조건은?

    더보기

    작업이 진행되지 않는 카드들 간의 순서는 변경되지 않습니다.

    그러니, 작업이 진행되지 않는 카드들끼리는 정렬되어있어야 하겠죠.

     

    다르게 말하자면, 이 카드들은 오름차순이어야 합니다.

     

    이 조건 외에는 추가적인 제약이 없습니다.

    저 카드들만 오름차순이라면, 우리가 움직일 수 있는 카드들은 항상 적당한 위치에 끼워넣을 수 있기 때문이죠.

     

    4. 이제 원래 문제로 돌아와보자.

    더보기

    \( K \)장의 카드를 움직인다는 것은, \( N-K \)장의 카드를 가만히 놓겠다는 의미이고,

    이는 \( N-K \)장의 카드가 정렬되어있어야 유효합니다.

     

    연산 횟수 = 움직이는 카드의 개수 = \( K \)를 최소화해야 하므로,

    자연스럽게 \( N-K \)를 최대화해야 합니다.

     

    길이가 최대인 오름차순을 만든다?

    결국, 최대 증가 부분 수열을 찾아야 한다는 의미가 됩니다.

     

    코드

    더보기

    시대가 좋아져서, \( O(N^2) \)이 시간 내에 통과를 하게 됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int arr[30020];
    int dp[30020];
     
    void Main(){
        int n; cin >> n;
        for (int i = 1; i <= n; i++){ cin >> arr[i]; }
        for (int i = 1; i <= n; i++){
            for (int j = 0; j < i; j++){
                if (arr[j] < arr[i]){ dp[i] = max(dp[i], dp[j]+1); }
            }
        }
        int res = *max_element(dp, dp+n+1);
        cout << n-res;
    }
    cs

    '문제 풀이 > AtCoder' 카테고리의 다른 글

    [ABC128 E] Roadwork  (0) 2023.01.30
    [AGC025 B] RGB Coloring  (0) 2023.01.30
    [ABC213 E] Stronger Takahashi  (0) 2023.01.30
    [ABC038 C] 単調増加  (0) 2023.01.30
    [ABC226 C] Martial artist  (0) 2023.01.30
Designed by Tistory.