dukim's blog

[BOJ-17409]증가 수열의 개수(in Python) 본문

Coding-Test

[BOJ-17409]증가 수열의 개수(in Python)

eliza.dukim 2021. 7. 3. 03:16

문제

https://www.acmicpc.net/problem/17409

 

17409번: 증가 수열의 개수

첫째 줄에 N, K가 주어진다. 둘째 줄에 수열 A1, A2, ..., AN이 주어진다.

www.acmicpc.net

 

설명

가장 긴 증가하는 부분 수열 문제는 파이썬 풀이가 있지만,

증가 수열의 개수(17409)는 파이썬 풀이를 찾으려고 해도 찾기가 힘들어서

lastknight00님의 포스트를 참고하여 Python 코드로 작성하였습니다.

N이 작은 경우에는 DP를 이용한 풀이가 가능하지만 시간복잡도가 O(N^2)으로

위 문제의 조건(1<=N<+100,000)에서는 적용하면 시간초과 판정을 받습니다.

아래 코드는 DP를 이용하는 것은 동일하나 각 원소보다 작은 수의 개수를 조회할 떄

세그먼트 트리를 이용하여 시간복잡도 O(KNlogN)로 작동합니다.

lastknight00님의 c++코드와 로직은 동일합니다.

 

소스 코드

import sys
input = sys.stdin.readline
n, m = map(int, input().split())
arr = list(map(int, input().split()))
dp = [[0] * int(n + 2) for _ in range(m + 1)]

def q(p, k):
    s = 0
    while p:
        s = (s + dp[k][p]) % 1000000007
        p -= (p & -p)
    return s

def u(p, k, v):
    while p <= n + 1:
        dp[k][p] = (dp[k][p] + v) % 1000000007
        p += (p & -p)

u(1, 0, 1)
for i in arr:
    for j in range(1, m + 1):
        u(i + 1, j, q(i, j - 1))

print(q(n + 1, m))

 

Reference

- https://lastknight00.tistory.com/11

 

[백준] 증가 수열의 갯수(17409)

문제 링크 : [백준] 증가 수열의 갯수(17409) 문제 설명 n개의 원소를 가지는 수열이 주어졌을 때, 증가하는 수열의 길이가 k인 부분 수열이 몇개가 있는지 구하여라. 입력 n(배열의 갯수, 1<=n<=100,000)

lastknight00.tistory.com

- https://m.blog.naver.com/PostView.naver?blogId=edenooo&logNo=221624562330&proxyReferer=https:%2F%2Fwww.google.com%2F 

 

백준(BOJ) 새로 추가된 8문제 풀이

글을 안 쓴 지가 오래된 것 같아 쓰는 글입니다. 최근에 쿼리 문제들이 몇 개 더 추가되었길래 제가 푼 문...

blog.naver.com

- https://www.geeksforgeeks.org/count-number-increasing-subsequences-size-k/

 

Count number of increasing subsequences of size k - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

- https://hrothgar.tistory.com/69

 

BOJ 13555 증가하는 부분 수열

증가하는 부분 수열 (http://boj.kr/13555) 앞의 원소부터 차례대로 원소의 값을 인덱스로 해서 배열에 저장해두면, 현재 원소의 값보다 작은 인덱스에 저장된 것들은 현재 원소보다 앞에 있고 작은

hrothgar.tistory.com

- https://www.geeksforgeeks.org/count-number-increasing-subsequences-size-k/

 

Count number of increasing subsequences of size k - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

'Coding-Test' 카테고리의 다른 글

[BOJ-18428] 감시 피하기  (0) 2021.03.03
[BOJ-18405] 경쟁적 전염  (0) 2021.02.26
Comments