https://school.programmers.co.kr/learn/courses/30/lessons/154539
๐ ๋ฌธ์
๐ซ ์ ํ ์ฌํญ
โ๏ธ ์ ์ถ๋ ฅ
์
์ถ๋ ฅ ์ #1
2์ ๋ท ํฐ์๋ 3์
๋๋ค. ์ฒซ ๋ฒ์งธ 3์ ๋ท ํฐ์๋ 5์
๋๋ค. ๋ ๋ฒ์งธ 3 ๋ํ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. 5๋ ๋ท ํฐ์๊ฐ ์์ผ๋ฏ๋ก -1์
๋๋ค. ์ ์๋ค์ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ผ๋ฉด [3, 5, 5, -1]์ด ๋ฉ๋๋ค.
๐ก ํ์ด
์์ ๋ณด๋ค ํฌ๋ฉด์ ๊ฐ๊น์ด ์๋ ์๋ฅผ answer์ ์ ์ฅํด์ผ ํ๋ค.
numbers์ ๋ง์ง๋ง ์๋ ๋น๊ต ๋์์ด ์์ผ๋ฏ๋ก result์ ๋ง์ง๋ง์ ํญ์ -1์ด ๋ ๊ฒ์ด๋ค.
์ฒ์์๋ ์ด์ค for๋ฌธ์ ์ฌ์ฉํด ํ์๋ค. ์๊ฐ์ด๊ณผ ๊ฐ ๋ฐ์ํ๋ค. ์๋ฌด๋๋ ์ ํ ์ฌํญ์์ numbers์ numbers[i]์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ก์์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.
์ดํ, ํด๊ฒฐํ ๋ฐฉ๋ฒ์ stack์ ์ฌ์ฉํ๋ค.
stack์ top์ numbers[i]์ ๋น๊ตํด์ ๊ฒฐ๊ณผ๋ฅผ answer์ ๊ฐฑ์ ํ๋๋ก ํ๋ค.
1. ์ซ์๋ค์ ์ ์ฅํ ์คํ ์์ฑ, answer ๋ฆฌ์คํธ -1๋ก ์ด๊ธฐํ
2. numbers์ ๊ธธ์ด๋งํผ ๋ฐ๋ณต๋ฌธ
3. while๋ฌธ -> ์คํ์ ์์๊ฐ ์กด์ฌํ๊ณ , ์คํ์ top์ ์๋ ์ธ๋ฑ์ค์ ํด๋นํ๋ ์ซ์๊ฐ ํ์ฌ ์ํ ์ค์ธ ์ซ์๋ณด๋ค ์์ ๋๊น์ง ๋ฐ๋ณต
4. ๋ ํฐ ์ซ์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด answer ๊ฐฑ์
def solution(numbers):
stack = [] # ์ซ์๋ค์ ์ ์ฅํ ์คํ
answer = [-1] * len(numbers) # ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ฅผ -1๋ก ์ด๊ธฐํ
for i in range(len(numbers)):
while stack and numbers[stack[-1]] < numbers[i]:
answer[stack.pop()] = numbers[i] # ๋ ํฐ ์ซ์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์คํ์์ ํํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐฑ์
stack.append(i) # ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์คํ์ ์ถ๊ฐ
return answer