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(..