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

2025. 4. 16. 17:52ยทAlgorithm & Data Structures/BOJ

 

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

 

 

 

๐Ÿ“Œ ์ž๋ฐ”(Java)๋กœ ํ‘ธ๋Š” ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 5 - ๋ฐฑ์ค€ 14003 ๐Ÿ”ผ

LIS + ๊ฒฝ๋กœ ์ถ”์ ์„ O(N log N)์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋Œ€ํ‘œ ๋ฌธ์ œ

 

 

๐Ÿ”Ž ๋ฌธ์ œ ๊ฐœ์š”

๋ฐฑ์ค€ 14003๋ฒˆ - ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด 5 ๋ฌธ์ œ๋Š”

์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ,

 

  1. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด
  2. ํ•ด๋‹น ๋ถ€๋ถ„ ์ˆ˜์—ด ์ž์ฒด

 

๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹จ, ์ˆ˜์—ด์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 100๋งŒ ๊ฐœ์ด๋ฏ€๋กœ O(Nยฒ) ํ’€์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 


๐Ÿ’ก ์˜ˆ์ œ ์ž…๋ ฅ

6
10 20 10 30 20 50

 

๐Ÿ’ก ์˜ˆ์ œ ์ถœ๋ ฅ

4  
10 20 30 50

 

 


๐Ÿ›  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ์‹

 

 

โœ… ํ•ต์‹ฌ ์ „๋žต: ์ด์ง„ ํƒ์ƒ‰ ๊ธฐ๋ฐ˜ LIS + ๊ฒฝ๋กœ ์ถ”์ 

 

  • list[]: ํ˜„์žฌ๊นŒ์ง€ ๋งŒ๋“  LIS ์ˆ˜์—ด (๊ฐ’๋งŒ ์ถ”์ )
  • dp[i]: arr[i]๊ฐ€ LIS์˜ ๋ช‡ ๋ฒˆ์งธ ์œ„์น˜์ธ์ง€
  • prev[i]: LIS ๊ฒฝ๋กœ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ด์ „ ์ธ๋ฑ์Šค
  • lastIndex[length]: ํ•ด๋‹น ๊ธธ์ด์˜ LIS์—์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด์˜จ ์ธ๋ฑ์Šค

 


๐Ÿ”น Java ์ฝ”๋“œ ์„ค๋ช…

 

 

๐Ÿ“Œ LIS ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •

list[0] = arr[0];
dp[0] = 1;
prev[0] = -1;
lastIndex[0] = 0;

โœ” ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ LIS์˜ ์‹œ์ž‘์œผ๋กœ ์„ค์ •

๐Ÿ“Œ LIS ์ง„ํ–‰ & ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ์œ„์น˜ ๊ณ„์‚ฐ

if (val > list[top]) {
    list[++top] = val;
    dp[i] = top + 1;
    prev[i] = lastIndex[top - 1];
    lastIndex[top] = i;
} else {
    int left = 0, right = top;
    while (left < right) {
        int mid = (left + right) / 2;
        if (list[mid] >= val) right = mid;
        else left = mid + 1;
    }
    list[left] = val;
    dp[i] = left + 1;
    prev[i] = (left == 0) ? -1 : lastIndex[left - 1];
    lastIndex[left] = i;
}

โœ” ์ˆ˜์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ

โœ” list๋Š” ๊ฐ’๋งŒ ์ €์žฅํ•˜๊ณ 

โœ” prev, dp, lastIndex๋ฅผ ํ†ตํ•ด ๊ฒฝ๋กœ ๋ณต์› ์ •๋ณด ์ €์žฅ

๐Ÿ“Œ ๊ฒฝ๋กœ ๋ณต์›

int[] result = new int[top + 1];
int resultIdx = top;
int idx = lastIndex[top];
while (idx != -1) {
    result[resultIdx--] = arr[idx];
    idx = prev[idx];
}

โœ” lastIndex[top]์—์„œ๋ถ€ํ„ฐ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ๊ฒฝ๋กœ ๋ณต์›

โœ” prev[]๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ์ˆ˜์—ด ์—ญ์ถ”์ 

โœ” ์—ญ์ˆœ์œผ๋กœ ๋ฐฐ์—ด์— ์ €์žฅ ํ›„ ์ถœ๋ ฅ


๐Ÿ† ์ •๋ฆฌ

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ

 

  • O(N log N) LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๊ฒฝ๋กœ ์ถ”์ ์šฉ ์ธ๋ฑ์Šค ๋ฐฐ์—ด ์ถ”๊ฐ€
  • ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์–ตํ•ด๋‘๊ณ  ์—ญ์ถ”์ ํ•˜๋ฉด ์‹ค์ œ ์ˆ˜์—ด๋„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฐฑ์ค€ 14002๋ณด๋‹ค ์ž…๋ ฅ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๋ฏ€๋กœ ํšจ์œจ์„ฑ ํ•„์ˆ˜
 

   

                                                                      

'Algorithm & Data Structures > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

b13913. ์ˆœ๊ฐ„์ด๋™ 4  (0) 2025.04.22
b2618. ๊ฒฝ์ฐฐ์ฐจ  (0) 2025.04.18
b14002. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด 4  (0) 2025.04.15
b12852. 1๋กœ ๋งŒ๋“ค๊ธฐ 2  (0) 2025.04.14
b1450. ๋ƒ…์ƒ‰๋ฌธ์ œ  (1) 2025.04.10
'Algorithm & Data Structures/BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • b13913. ์ˆœ๊ฐ„์ด๋™ 4
  • b2618. ๊ฒฝ์ฐฐ์ฐจ
  • b14002. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด 4
  • b12852. 1๋กœ ๋งŒ๋“ค๊ธฐ 2
Geisha
Geisha
๊ฐœ๋ฐœ ์ผ๊ธฐ
  • Geisha
    Geisha
    Geisha
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (311) N
      • Algorithm & Data Structures (235) N
        • BOJ (93) N
        • SWEA (1)
        • Programers (137) N
        • Data Structures (3)
      • DB (23) N
        • SQL (17) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • ์šด์˜์ฒด์ œ (13)
        • ๋„คํŠธ์›Œํฌ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ›„์œ„์ˆœํšŒ
    PriorityQueue
    ํˆฌํฌ์ธํ„ฐ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    unionfind
    Stack
    Dijkstra
    ๋ฐฑํŠธ๋ž˜ํ‚น
    DynamicProgramming
    ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ
    Union-Find
    binarySearch
    ์Šคํƒ
    programmers
    SQL
    ์ „์œ„์ˆœํšŒ
    dfs
    ๊ณจ๋“œ
    ๊ตฌํ˜„
    BFS
    ๋ฐฑ์ค€
    dp
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ๊ฒฝ๋กœ์••์ถ•
    baekjoon
    algorithm
    Java
    ์ด๋ถ„ํƒ์ƒ‰
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋™์ ๊ณ„ํš๋ฒ•
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Geisha
b14003. ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด 5
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.