Python/๐Ÿ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - '๋’ค์— ์žˆ๋Š” ํฐ ์ˆ˜' [์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต]

jo._.on_ 2024. 4. 8. 14:08

# ๋’ค์— ์žˆ๋Š” ํฐ ์ˆ˜ # 154539 # lv2

 

# ๋ฌธ์ œ


์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด numbers๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ์˜ ๊ฐ ์›์†Œ๋“ค์— ๋Œ€ํ•ด ์ž์‹ ๋ณด๋‹ค ๋’ค์— ์žˆ๋Š” ์ˆซ์ž ์ค‘์—์„œ ์ž์‹ ๋ณด๋‹ค ํฌ๋ฉด์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์ˆ˜๋ฅผ ๋’ท ํฐ์ˆ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ •์ˆ˜ ๋ฐฐ์—ด numbers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•œ ๋’ท ํฐ์ˆ˜๋“ค์„ ์ฐจ๋ก€๋กœ ๋‹ด์€ ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ๋’ท ํฐ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์›์†Œ๋Š” -1์„ ๋‹ด์Šต๋‹ˆ๋‹ค.

 

# ์ œํ•œ์‚ฌํ•ญ


  • 4 ≤ numbers์˜ ๊ธธ์ด ≤ 1,000,000
  • 1 ≤ numbers[i] ≤ 1,000,000

-> ์ด์ค‘ for๋ฌธ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜ (๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ) ๋ฐœ์ƒ ๊ฐ€๋Šฅ!!

 

# ํ’€์ด


def solution(numbers):
    # <์•„์ด๋””์–ด>
    # ์Šคํƒ method ์‚ฌ์šฉ
    # answer๋ฅผ numbers์˜ ๊ธธ์ด๋งŒํผ์˜ -1 ์›์†Œ๋“ค๋กœ ์ฑ„์›€.
    # numbers ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ ํ•˜๋‚˜์— ์ ‘๊ทผ.
    # ๊ทธ ์›์†Œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฐฐ์—ด(rest_list)์— ํ•ด๋‹น ์›์†Œ๋ณด๋‹ค ํฐ ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฉด, ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ์— append
    # ๋‹จ, ์ž๊ธฐ ์ž์‹ ๋ณด๋‹ค ํฐ ์ˆซ์ž๊ฐ€ ์ž์‹ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•จ. 
    
    rest_list = []
    answer = [-1] * len(numbers)

    for i in range(len(numbers)):
    # rest_list์˜ ๊ธธ์ด๊ฐ€ 1์ด์ƒ(== ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์ด ์žˆ๋Š” ๋™์•ˆ)์ด๊ณ , rest_list์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ numbers[i]์˜ ์›์†Œ๋ณด๋‹ค ์ž‘์œผ๋ฉด, 
        while rest_list and numbers[rest_list[-1]] < numbers[i]: 
        # rest_list์˜ pop() ๋œ ์›์†Œ๊ฐ€ answer์˜ ์ธ๋ฑ์Šค๊ฐ’์œผ๋กœ ๋˜์–ด numbers ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ ๋“ค์–ด๊ฐ.
            answer[rest_list.pop()] = numbers[i]
        # rest_list์—๋Š” numbers์˜ ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. 
        rest_list.append(i)
    return answer