BOJ/๐Ÿ…

โ˜…DP Expert(Easy) I - 4 Solvedโ˜…

metamong 2024. 1. 7.

โ˜… 14003 ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 5 โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
A=list(map(int,input().split()))

#binary search
def binary_search(l, i, x):
    start,end=0,len(l)-1
    while start<=end:
        mid=(start+end)//2
        if x <= l[mid]:
            end=mid-1
            ans=mid
        else:
            start=mid+1
    l[ans]=x
    i.append(ans+1)
    return l, i

#LIS
ans_i=[1]
ans_num=[A[0]]
cur_ans_l=1
LIS=[]

for x in range(1,N):
    if ans_num[-1] < A[x]: #just add
        cur_ans_l+=1
        ans_i.append(cur_ans_l)
        ans_num.append(A[x])
    else: #searching the spot
        ans_num,ans_i=binary_search(ans_num, ans_i, A[x])
    
LIS_length = len(ans_num)
print(LIS_length)
for i in range(len(ans_i)-1,-1,-1):
    if LIS_length == 0:
        break

    if ans_i[i] == LIS_length:
        LIS.append(A[i])
        LIS_length-=1

print(*reversed(LIS))

 

โ›น๏ธ LIS์˜ ๊ธธ์ด์™€ ๋‚ด์šฉ์„ O(nlogn) ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ด๋‚ด๋กœ ๊ตฌํ•˜๋Š” ๊ต๊ณผ์„œ ๋ฌธ์ œ. LIS์˜ ๊ธธ์ด๋Š” ans_num list์—์„œ binary search๋กœ updateํ•˜๋ฉฐ ๋‚ด์šฉ ์ถ”๊ฐ€. LIS์˜ ๋‚ด์šฉ์€ ans_i list์—์„œ ์•ž์„  binary search๋กœ ์‚ฝ์ž…๋˜๋Š” ์›์†Œ์˜ index๋ฅผ updateํ•˜๋ฉฐ ๊ฑฐ๊พธ๋กœ ์ตœ๋Œ“๊ฐ’๋ถ€ํ„ฐ 1์ด ๋ ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๋˜๋Š” index์˜ list ์›์†Œ ์ˆ˜์—ด. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LIS ํฌ์ŠคํŒ… ์ฐธ์กฐ


โ˜… 23035 ๊ฐ€ํ†จ๋ฆญ๋Œ€๋Š” ๊ณ ์–‘์ด๋ฅผ ์‚ฌ๋ž‘ํ•ด โ˜…

import sys
input=sys.stdin.readline

def binary_search_lis(arr,n):
    start,end=0,len(arr)-1
    while start<=end:
        mid=(start+end)//2
        if n < arr[mid]:
            ans = mid
            end = mid-1
        else:
            start = mid+1
    arr[ans] = n
    return arr

N,M=map(int,input().split())
cats=[]
T=int(input())
for _ in range(T):
    r,c=map(int,input().split())
    if 0<=r<=N and 0<=c<=M:
        cats.append((c,r))
cats=sorted(cats,key=lambda x: (x[0],x[1]))
n=len(cats)

dp=[cats[0][1]]

for i in range(1,n):
    if dp[-1]<=cats[i][1]:
        dp.append(cats[i][1])
    else:
        dp=binary_search_lis(dp,cats[i][1])
print(len(dp))

 

โ›น๏ธ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ๋ณ€ํ˜• LIS(Longest Increasing Subsequence) "LNDS(Longest Non-Decreasing Subsequence)" ๋ฌธ์ œ.

 

โ›น๏ธ ์˜ˆ์‹œ ๋ถ„์„

: ์œ„ ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ๋กœ ์ฃผ์–ด์ง„ ๊ณ ์–‘์ด์˜ ์œ„์น˜๋ฅผ y๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ - ์ดํ›„ x๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

โ˜… โ‘  y๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ → x๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

: ์ฟ ๊ธฐ๋Š” ๋ฌด์กฐ๊ฑด ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋‹ค์†”๊ด€๊นŒ์ง€ ์ด๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ฟ ๊ธฐ๋Š” y์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์† ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ(์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉํ–ฅ) & x์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์† ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ(์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉํ–ฅ)์œผ๋กœ๋งŒ ์ด๋™ํ•œ๋‹ค.

 

์ด๋Š”, y์™€ x ์ขŒํ‘œ ๊ธฐ์ค€ ๋‘ ๋ฐฉํ–ฅ ๋ชจ๋‘ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋œป. y๊ธฐ์ค€์œผ๋กœ ์ผ๋‹จ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„, ๋™์ผ y์ขŒํ‘œ๋ฅผ ๊ฐ€์ง„ ๊ณ ์–‘์ด๊ฐ€ ์žˆ๋‹ค๋ฉด(๋™์ผํ•œ ์œ„์น˜๋ฅผ ๊ฐ€์ง„ 2๋งˆ๋ฆฌ ์ด์ƒ์˜ ๊ณ ์–‘์ด๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค ๊ฐ€์ •), x ๊ธฐ์ค€ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ•„์š”.(์œ„ (x,y) (1,6), (5,6) ํ•ด๋‹น)

 

โ˜… โ‘ก y ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ์—ฌ๋Ÿฌ x์—์„œ LNDS์˜ ๊ธธ์ด ์ฐพ๊ธฐ

: ๋ฌด์กฐ๊ฑด y๋Š” ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ฟ ๊ฑฐ๊ฐ€ ์ด๋™ํ•˜๋Š” ์ƒํƒœ์—์„œ x๊ฐ€ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ณ ์–‘์ด๋“ค์„ ๋ฐฅ์„ ์ฑ™๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ด๋Š” ์œ„ โ‘ ๋กœ ์ธํ•ด ์ •๋ ฌ๋œ ํ›„์˜ x์—์„œ LNDS์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

โ˜… โ‘ข ๊ด€๊ฑด์€, y๋Š” ๋‹ค๋ฅด๋˜ ๋™์ผํ•œ x์— ์œ„์น˜ํ•ด ์žˆ๋Š” ๊ณ ์–‘์ด๋“ค ๊ณ ๋ ค ํ•„์š”

: ์ „ํ˜•์ ์ธ LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ '์ฆ๊ฐ€'ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ, ์œ„ (x,y) (2,1) / (2,2)์™€ ๊ฐ™์ด x๊ฐ€ ๋™์ผํ•œ, ์ฆ‰ ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ์œ„์น˜ํ•ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ ๊ทธ๋ฆผ์„ ํ™•์ธํ•˜์ž.

: ๋™์ผํ•œ y(์„ธ๋กœ์ถ•)์— ๋‘ ๋งˆ๋ฆฌ ์ด์ƒ์˜ ๊ณ ์–‘์ด๊ฐ€ ๋‹ค๋ฅธ x๋กœ ์œ„์น˜ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ด ๋•Œ, ๋™์ผํ•œ y(2)์— ์žˆ๋Š” ๋‘ ๊ณ ์–‘์ด(1, 2) ๋ชจ๋‘ ๋ฐฅ์„ ์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ y(3)๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค. ์ด ๋•Œ, ์ด์ „ x(2)์™€ ๊ฐ™์•„๋„ y๋กœ ๋‚ด๋ ค๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „ํ˜•์ ์ธ LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ๋ฅผ ๋ณ€ํ˜•ํ•œ '๊ฐ€์žฅ ๊ธด ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด'์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ํ‘œ์™€ ๊ฐ™์ด ๋นจ๊ฐ„์ƒ‰ ์ˆซ์ž 1, 2, 2, 2, 3 ์ด 5๋งˆ๋ฆฌ์—๊ฒŒ ๋ฐฅ์„ ๋จน์ผ ์ˆ˜ ์žˆ๋‹ค.

 

Q. ๋ฌด์กฐ๊ฑด ๋™์ผ y์—์„œ ๋ชจ๋“  x์˜ ๊ณ ์–‘์ด๋ฅผ ๋จน์ด๋Š”๊ฒŒ ๊ฐ€์žฅ ๋งŽ์€ ๊ณ ์–‘์ด๋ฅผ ๋จน์ผ ์ˆ˜ ์žˆ์„๊นŒ? ๋™์ผ x ๋ฐฉํ–ฅ์ธ ์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚ด๋ ค๊ฐ€์„œ ๊ณ ์–‘์ด๋ฅผ ๋จน์ด๋ฉด ์•ˆ๋ ๊นŒ?

A: ์ฆ‰ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์ด๋™ํ•˜๋ฉด 4๋งˆ๋ฆฌ๋งŒ ๋จน์ผ ์ˆ˜ ์žˆ๊ณ , ํ•˜๋Š˜์ƒ‰์œผ๋กœ ์ด๋™ํ•˜๋ฉด 5๋งˆ๋ฆฌ๋ฅผ ๋จน์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌด์กฐ๊ฑด ์œ„ โ‘ ๋Œ€๋กœ ์ •๋ ฌ์ด ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ์œ„ ๊ทธ๋ฆผ case๊นŒ์ง€ ์ ์šฉํ•œ ํ’€์ด๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ? ์ •๋‹ต์€ LIS(Onlogn)์˜ dp array ๊ตฌ์„ฑ์— ์žˆ๋‹ค.

 

: LIS(Onlogn)์˜ ๊ธธ์ด๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ตœ์ข… dp array์˜ ๊ตฌ์„ฑ ๋‚ด์šฉ์€ ์‹ค์ œ LIS์˜ ๋‚ด์šฉ๊ณผ ๋‹ค๋ฅด๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ .

: ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, ์šฐ๋ฆฌ๋Š” LIS์˜ '๊ธธ์ด'๋งŒ ๊ถ๊ธˆํ•˜๋ฏ€๋กœ, ์‹ค์ œ ์ตœ์ข… update๋œ dp array๋Š” [2, 10, 40, 80]์œผ๋กœ ์›๋ž˜ ๊ตฌ์„ฑ๋œ 10 - 2 - 40 - 80 ์ˆœ์„œ์™€ ๋‹ค๋ฅด๋‹ค. ์ฆ‰, LIS dp array๋ฅผ updateํ•˜๋Š” ๊ณผ์ •์—์„œ ์œ„ ์งˆ๋ฌธ์˜ ์‹ค๋งˆ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

ex) [8, 10, 14, 10]์ด ์žˆ๋‹ค๋ฉด

(1) ๋ณธ๋ž˜ LIS(Onlogn) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ ์ด๋ถ„ ํƒ์ƒ‰์—์„œ n<= arr[mid] ๋ถ€๋“ฑ์‹์œผ๋กœ ๋ฐ”๊ฟ€ ์œ„์น˜ ans index๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด 10 ๋Œ€์‹  ์ƒˆ๋กœ์šด 10์ด ๋“ค์–ด๊ฐ€ [8, 10, 14] ์™„์„ฑ

 

(2) ๋ณ€ํ˜• ์ค‘๋ณต ํ—ˆ์šฉ LNDS(Onlogn) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ ์ด๋ถ„ ํƒ์ƒ‰์—์„œ n<arr[mid] ๋ถ€๋“ฑ์‹์œผ๋กœ ๊ธฐ์กด 14 ๋Œ€์‹  ์ƒˆ๋กœ์šด 10์ด ๋“ค์–ด๊ฐ€ [8, 10, 10]์ด ์™„์„ฑ๋œ๋‹ค.

 

์ด๋Š” ์ฆ๊ฐ€์ˆ˜์—ด์ด ์•„๋‹ˆ๋ผ ์ค‘๋ณต ํ—ˆ์šฉ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์˜ ์ตœ์žฅ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ค‘๋ณต ํ—ˆ์šฉ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋ผ๋ฉด, ์ค‘๋ณต์€ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— dp array์˜ ๋งจ ๋ ์›์†Œ๊ฐ€ 14๊ฐ€ ์•„๋‹ˆ๋ผ ์ค‘๋ณต์œผ๋กœ 10์„ ๋ถ™์ด๋Š”๊ฒŒ ๋งž๊ธฐ ๋•Œ๋ฌธ.

 

: ์œ„ ์˜ˆ์‹œ์˜ ์›๋ฆฌ๋ฅผ ๋‹ค์‹œ ์œ„ ๊ณ ์–‘์ด ๊ทธ๋ฆผ์— ์ ์šฉํ•˜์ž๋ฉด, xํ‘œ์ธ ๊ณ ์–‘์ด(2) ๋Œ€์‹  ๊ทธ ๋‹ค์Œ ์ค„ ๊ณ ์–‘์ด(1)๊ฐ€ (์ค‘๋ณต ํ—ˆ์šฉ์ด๋ฏ€๋กœ ์›๋ž˜ ๊ณ ์–‘์ด(1) ๊ทธ ๋‹ค์Œ์— ์™€๋„ ๋œ๋‹ค.) ๋“ค์–ด๊ฐ„๋‹ค. ์ด๋Š” ๊ณง, ๊ฐ™์€ ์ค„์— ์žˆ๋Š” ๊ณ ์–‘์ด๋ฅผ ๋จน์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ(์ค‘๋ณต ํ—ˆ์šฉ ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ตœ์žฅ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ๋‚ด์šฉ๊ณผ ์ผ๋งฅ์ƒํ†ตํ•œ๋‹ค. ํ˜„์žฌ ์œ„์น˜์—์„œ ๋’ค๋กœ ๊ฐˆ ์ˆœ ์—†์ง€๋งŒ, ๊ฐ™์€ ์ค„์— ์žˆ๋Š” ๊ณ ์–‘์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ค‘๋ณต ํ—ˆ์šฉํ•ด์„œ ans๋ฅผ updateํ•ด์ฃผ๋Š” ์›๋ฆฌ๊ฐ€ ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ!

 

โ˜… โ‘ฃ ๋ณ€ํ˜• LNDS(Longest Non-Decreasing Subsequence) (Onlogn) ์ผ๋ถ€ ์ฝ”๋“œ

 

(1) update dp array์˜ ๋งจ ๋ ์›์†Œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ '๊ฐ™๋‹ค'๋ฉด array์— ์ถ”๊ฐ€

dp=[cats[0][1]]

for i in range(1,n):
    if dp[-1]<=cats[i][1]:
        dp.append(cats[i][1])
    else:
        dp=binary_search_lis(dp,cats[i][1])

 

(2) update dp array์˜ ๋งจ ๋ ์›์†Œ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, binary searching์—์„œ n์ด ์ž์‹ ๋ณด๋‹ค ํฐ ์›์†Œ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ ๋Œ€์‹  (ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์›์†Œ x) ๋Œ€์ฒด

def binary_search_lis(arr,n):
    start,end=0,len(arr)-1
    while start<=end:
        mid=(start+end)//2
        if n < arr[mid]:
            ans = mid
            end = mid-1
        else:
            start = mid+1
    arr[ans] = n
    return arr

โ˜… 2568 ์ „๊นƒ์ค„ - 2 โ˜…

import sys
input=sys.stdin.readline

def binary_search_lis(arr,arr_i,N):
    start,end=0,len(arr)-1
    while start<=end:
        mid=(start+end)//2
        if N<=arr[mid]:
            ans=mid
            end=mid-1
        else:
            start=mid+1
    arr[ans] = N
    arr_i.append(ans+1)
    return arr,arr_i      



N=int(input())
AB=[]
for _ in range(N):
    a,b=map(int,input().split())
    AB.append((a,b))
AB=sorted(AB,key= lambda x:(x[0]))
values=[x[1] for x in AB]

arr=[values[0]]
arr_i=[1]
cur_i=1

for x in range(1,N):
    if arr[-1] < values[x]:
        cur_i+=1
        arr.append(values[x])
        arr_i.append(cur_i)
    else:
        arr,arr_i=binary_search_lis(arr,arr_i,values[x])

print(N-len(arr))

LIS_length=len(arr) 
remove_idxs=[]
for x in range(N-1,-1,-1):
    if arr_i[x] == LIS_length:
        LIS_length-=1
    else:
        remove_idxs.append(x)
remove_idxs.sort()

for idx in remove_idxs:
    print(AB[idx][0])

 

โ›น๏ธ ์ „๋ด‡๋Œ€ A๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ์ „๋ด‡๋Œ€ B์˜ LIS(Onlogn)๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. ์ด ๋•Œ LIS์˜ ๋‚ด์šฉ๊นŒ์ง€ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ LIS index ์—ญ์ถ”์ ๊นŒ์ง€ ๊ณ ๋ ค. ์œ„ 14003 ๋ฌธ์ œ์™€ ๋™์ผ


โ˜… 1974 Jump Jump Championship โ˜…

import sys
input=sys.stdin.readline


#binary search
def binary_search(l, i, x):
    start,end=0,len(l)-1
    while start<=end:
        mid=(start+end)//2
        if x <= l[mid]:
            end=mid-1
            ans=mid
        else:
            start=mid+1
    l[ans]=x
    i.append(ans+1)
    return l, i


for _ in range(int(input())):
    N=int(input())
    A=list(map(int,input().split()))
    #LIS
    ans_i=[1]
    ans_num=[A[0]]
    cur_ans_l=1
    LIS_i=[]

    for x in range(1,N):
        if ans_num[-1] < A[x]: #just add
            cur_ans_l+=1
            ans_i.append(cur_ans_l)
            ans_num.append(A[x])
        else: #searching the spot
            ans_num,ans_i=binary_search(ans_num, ans_i, A[x])
        
    LIS_length = len(ans_num)
    print(LIS_length)
    for i in range(len(ans_i)-1,-1,-1):
        if LIS_length == 0:
            break

        if ans_i[i] == LIS_length:
            LIS_i.append(i+1)
            LIS_length-=1

    print(*reversed(LIS_i))

 

โ›น๏ธ LIS(Onlogn)์˜ ๊ธธ์ด์™€ ์—ญ์ถ”์  ๊ฒฝ๋กœ ์ถœ๋ ฅ ์ „ํ˜•์ ์ธ ๋ฌธ์ œ


 

 

 

 

 

 

 

 

 

 

'BOJ > ๐Ÿ…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

โ˜…์ •๋ ฌ ์ตœ์ƒ๊ธ‰1 - 1๋ฌธ์ œ()โ˜…  (0) 2023.02.07

๋Œ“๊ธ€