[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฃผ์‹ ๊ฐ€๊ฒฉ (JAVA)

2025. 2. 5. 23:56ยท๐Ÿ’ช Algorithm
๋ฐ˜์‘ํ˜•

๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/42584

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

๋ฌธ์ œ ์š”์•ฝ

์ดˆ ๋‹จ์œ„ ์ฃผ์‹๊ฐ€๊ฒฉ ๋ฐฐ์—ด prices์— ๋Œ€ํ•ด ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ธฐ๊ฐ„์€ ๋ช‡ ์ดˆ์ธ์ง€ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

  • ์˜ˆ: [1,2,3,2,3] → [4,3,1,1,0]

 

์ œํ•œ

  • prices์˜ ๊ฐ ๊ฐ€๊ฒฉ์€ 1 ์ด์ƒ 10,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • prices์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

ํ’€์ด

prices์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 10^6์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(N)` ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ i์ดˆ ์‹œ์  ์ฃผ์‹ ๊ฐ€๊ฒฉ์ด ์–ธ์ œ ๋–จ์–ด์ง€๋Š”์ง€ ๊ทธ ๋’ค๋ฅผ ๋งค๋ฒˆ ํ™•์ธํ•œ๋‹ค๋ฉด, `O(N^2)`์ด๋ฏ€๋กœ ์ด ๋ฐฉ์‹์œผ๋กœ ํ’€์ดํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

O(N)์œผ๋กœ ํ’€๋ ค๋ฉด, prices ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ ๋™์‹œ์— ์ •๋‹ต๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ •๋‹ต์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ์ ์€ ์–ธ์ œ์ผ๊นŒ์š”?

 

์ฃผ์–ด์ง„ ์˜ˆ์ œ๋ฅผ ํ•œ ๋ฒˆ ์‚ดํŽด๋ด…์‹œ๋‹ค.

[1,2,3,2,3]

  • idx=1, idx=2, idx=4: ์ด์ „ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์—…๋ฐ์ดํŠธํ•  ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.
  • idx=3: ์ด์ „ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์กŒ์œผ๋ฏ€๋กœ idx 2์˜ ์ •๋‹ต์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • idx 1์˜ ์ •๋‹ต์€ ์›์†Œ ๊ฐ’์ด ๋™์ผํ•˜๋ฏ€๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
    ⇒ ์ด์ „ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๊ทธ ์ „์˜ ์ธ๋ฑ์Šค๋“ค์˜ ์ •๋‹ต์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ์—๋Š” ์—†์ง€๋งŒ ์ด์ „ ๊ฐ’๋ณด๋‹ค ๋™์ผํ•œ ๊ฐ’์ด ๋‚˜์™”์„ ๋•Œ๋„ ์—…๋ฐ์ดํŠธํ•  ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.
    • ex. [1,2,2], [3,2,2] → ๋‘ ์ƒํ™ฉ ๋ชจ๋‘ ๋‘ ๋ฒˆ์งธ 2์—์„œ๋Š” ์ •๋‹ต์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ •๋‹ต์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ์ ์€ “์ด์ „ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋‚˜์™”์„ ๋•Œ”์ž…๋‹ˆ๋‹ค.

 

๊ทผ๋ฐ ๋ฌธ์ œ๋Š” ์ด ์‹œ์ ์—์„œ ์•ž์„  ์ธ๋ฑ์Šค์˜ ์ •๋‹ต์ด ํ™•์ •๋  ์ˆ˜๋„ ์žˆ๊ณ , ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์•ž์œผ๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€๋ฉด์„œ ์ •๋‹ต์„ ํ™•์ •ํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ idx 3์—์„œ ์•ž์„  ์ธ๋ฑ์Šค์˜ ์ •๋‹ต์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๋•Œ, idx 2์˜ ์ •๋‹ต์€ ํ™•์ •๋˜์ง€ ์•Š์•˜๋Š”๋ฐ idx 1์˜ ์ •๋‹ต๋งŒ ํ™•์ •๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. idx 3 ์ด์ „์— ์ •๋‹ต์ด ํ™•์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ์˜€๋‹ค๋Š” ๊ฒƒ์€ idx 1 ≤ idx 2 ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. `idx=i`์— ๋Œ€ํ•ด `prices [i]<prices [i-1]`์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
    1. ๋งŒ์•ฝ ๋งž๋‹ค๋ฉด, ์ •๋‹ต์ด ํ™•์ •๋˜๋ฉฐ ์ •๋‹ต์€ `i-(i-1)`์ด๋‹ค.
      1. ์ธ๋ฑ์Šค `i-2`์˜ ์ •๋‹ต์ด ํ™•์ •๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, `prices [i]<prices [i-2]`์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
        1. …
    2. ์•„๋‹ˆ๋ผ๋ฉด, `i`์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  2. ๋งˆ์ง€๋ง‰์— ์ •๋‹ต์ด ํ™•์ •๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ธ๋ฑ์Šค๋“ค์€ ์ •๋‹ต์ด `(prices์˜ ๊ธธ์ด)-1-(์ž์‹ ์˜ ์ธ๋ฑ์Šค)`์ž…๋‹ˆ๋‹ค.

`i` ๊ฐ’์€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ(ํ›„์ž…), ์ •๋‹ต ํ™•์ • ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ๋’ท๋ฒˆํ˜ธ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.(์„ ์ถœ)

๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!

 

์ •๋‹ต์ด ํ™•์ •๋˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋Š” ์Šคํƒ์— push ํ•˜๊ณ , ์ •๋‹ต์ด ํ™•์ •๋˜๋Š” ์‹œ์ ์— pop ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ

import java.util.*;
class Solution {
    public int[] solution(int[] prices) {
        Stack<Integer> stack = new Stack<>();
        int[] answer = new int[prices.length];
        stack.push(0);
        int i;
        for(i=1; i<prices.length; i++){
            while(!stack.isEmpty() && prices[stack.peek()]>prices[i]){
                int idx = stack.pop();
                answer[idx] = i-idx;
            } 
            stack.push(i);
        }
        while(!stack.isEmpty()){
            int idx = stack.pop();
            answer[idx] = i-idx-1;
        }
        
        return answer;
    }
}

๐Ÿท ์‹œ๊ฐ„ ๋ณต์žก๋„

  • `N`: prices์˜ ๊ธธ์ด
  • stack์„ ๊ธฐ์ค€์œผ๋กœ prices์˜ ์›์†Œ๋“ค์ด ํ•œ ๋ฒˆ์”ฉ๋งŒ push, pop ๋ฉ๋‹ˆ๋‹ค.
    • push ์—ฐ์‚ฐ: N๋ฒˆ
    • pop ์—ฐ์‚ฐ: N๋ฒˆ
    • `O(N+N)` = `O(N)`
  • ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„: `O(N)`

๐Ÿท ์‹คํ–‰ ์†๋„

Time: 37.95 ms, Memory: 73.5 MB

๋ฐ˜์‘ํ˜•

'๐Ÿ’ช Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ/๋ฐฑ์ค€] 4963. ์„ฌ์˜ ๊ฐœ์ˆ˜ (JAVA)  (1) 2025.02.07
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ (JAVA)  (1) 2025.02.06
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ (JAVA)  (1) 2025.02.04
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ (JAVA)  (2) 2025.02.04
'๐Ÿ’ช Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ/๋ฐฑ์ค€] 4963. ์„ฌ์˜ ๊ฐœ์ˆ˜ (JAVA)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ (JAVA)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ (JAVA)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ (JAVA)
dev-heyjin
dev-heyjin
  • dev-heyjin
    ๊ฐœ๋ฐœ ๊ธฐ๋ก
    dev-heyjin
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (56)
      • ๐ŸŽฏ Programming (8)
      • ๐Ÿ’ช Algorithm (16)
      • โš™๏ธ CS (31)
        • ๋„คํŠธ์›Œํฌ (15)
        • ์šด์˜์ฒด์ œ (15)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    RDS
    DB
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ํ•ดํ‚น
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
dev-heyjin
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฃผ์‹ ๊ฐ€๊ฒฉ (JAVA)
์ƒ๋‹จ์œผ๋กœ

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