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