algorithm & data structure/coding test

    [๋ฐฑ์ค€] 5639: ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ

    ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ ๋ฐฉ์‹ ์ „์œ„ ์ˆœํšŒ(DLR) โœ”๏ธ ๋ฐ์ดํ„ฐ->์™ผ์ชฝ๋…ธ๋“œ->์˜ค๋ฅธ์ชฝ๋…ธ๋“œ ์ˆœ์„œ์ค‘์œ„ ์ˆœํšŒ(LDR) ์™ผ์ชฝ๋…ธ๋“œ->๋ฐ์ดํ„ฐ->์˜ค๋ฅธ์ชฝ๋…ธ๋“œ ์ˆœ์„œํ›„์œ„ ์ˆœํšŒ(LRD) โœ”๏ธ ์™ผ์ชฝ๋…ธ๋“œ->์˜ค๋ฅธ์ชฝ๋…ธ๋“œ->๋ฐ์ดํ„ฐ ์ˆœ์„œ๐Ÿ”— ๋ฌธ์ œ ๋งํฌ: https://www.acmicpc.net/problem/5639 ํ’€์ด ์ „์œ„ ์ˆœํšŒ์˜ ์ฒซ ์›์†Œ๋Š” ๋ฃจํŠธ์ž„! ๐Ÿ’ก idea: ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ•ด์„œ ํ›„์œ„ ์ˆœํšŒํ•˜๊ธฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ... ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„ + ํ›„์œ„ ์ˆœํšŒ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด๋ผ์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.๐Ÿ’ก ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์ž! ์ „์œ„ ์ˆœํšŒ์˜ ์ฒซ ์›์†Œ๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ์ด๊ณ , ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ, ๋ฃจํŠธ๋ณด๋‹ค ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์ฐธ๊ณ ํ•œ ๊ธ€

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

    ์ฃผ์‹๊ฐ€๊ฒฉ ๋ฌธ์ œ ์Šคํƒ Last In First Out(LIFO), ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ด push: ์Šคํƒ์— ์Œ“์Œ pop: ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ ๋ฐ˜ํ™˜ ํŒŒ์ด์ฌ ํ’€์ด def solution(prices): st=[] answer = [0]*len(prices) for i in range(len(prices)): if st == []: st.append(i) continue else: if prices[i] >= prices[i-1]: st.append(i) else: while prices[i] < prices[i-1] : top = st.pop() answer[top] = i-top if st == []: st.append(i) break top = st.pop() st.append(..