
๐ To Do List
โ๏ธ ์ฝํ ๊ฐ์ - stack
โ๏ธ ์ฌ์ด๋ ํ๋ก์ ํธ - ์ ์ ์ ๋ณด ์กฐํ api, access token ์ ํจ์ฑ ์ฒดํฌ api, dev ๋ฐฐํฌ
๐ฉ๐ป๐ป Today I Learned ...
ํ(Tower) ๋ฌธ์
https://www.acmicpc.net/problem/2493
์ด์ค for๋ฌธ ๋ฐฉ์
์
๋ ฅ: [6, 9, 5, 7, 4]
์๊ฐํ:
๐ซ ๐ซ ๐ซ ๐ซ ๋ ์ด์ ์ ๋ฐฉํฅ(์ผ์ชฝ์ผ๋ก)
I
I
I I
I I I
I I I I
I I I I I
6 9 5 7 4
์ถ๋ ฅ: [0, 0, 2, 2, 4]
- ๊ฐ ํ์์ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋ ์ด์ ๋ฅผ ๋ฐ์ฌ
- ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ํ์ ๋ง๋๋ฉด ์์ ๋จ
- ์ค๋ฅธ์ชฝ๋ถํฐ ์ญ์์ผ๋ก ํ์ํ๋ฉด์ ์ผ์ชฝ ํ๋ค์ ํ์ธ
def get_receiver_top_orders(heights):
n = len(heights)
result = [0] * n # ์ ํธ๋ฅผ ์์ ํ๋ ํ์ด ์์ผ๋ฉด 0์ผ๋ก ํ์
# ์ค๋ฅธ์ชฝ๋ถํฐ ์ญ์ ํ์
for i in range(n - 1, -1, -1):
# ํ์ฌ ํ์ ์ผ์ชฝ ํ๋ค์ ํ์ธ
for j in range(i - 1, -1, -1):
# ํ์ฌ ํ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ํ์ ์ฐพ์ผ๋ฉด
if heights[j] >= heights[i]:
result[i] = j + 1 # 1-indexed ์์น ์ ์ฅ
break
return result
- ๊ฐ ํ์์ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋ ์ด์ ๋ฅผ ๋ฐ์ฌํ๋ค.
- ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ํ์ ๋ง๋๋ฉด ์์ ๋๋ค.
- ์ค๋ฅธ์ชฝ๋ถํฐ ์ญ์์ผ๋ก ํ์ํ๋ฉด์ ์ผ์ชฝ ํ๋ค์ ํ์ธํ๋ค.
Stack ํ์ฉ ๋ฐฉ์
๐ก Stack์ด๋?
- ํ์ชฝ ๋์ผ๋ก๋ง ์๋ฃ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ
- ๊ธฐ๋ฅ
- `push(data)` : ๋งจ ์์ ๋ฐ์ดํฐ ๋ฃ๊ธฐ
- `pop()` : ๋งจ ์์ ๋ฐ์ดํฐ ๋ฝ๊ธฐ
- `peek()` : ๋งจ ์์ ๋ฐ์ดํฐ ๋ณด๊ธฐ
- `isEmpty()`: ์คํ์ด ๋น์๋์ง ์ ๋น์๋์ง ์ฌ๋ถ ๋ฐํํด์ฃผ๊ธฐ
์ด๊ธฐ: [6, 9, 5, 7, 4]
↑
pop
1. pop(4) → [6, 9, 5, 7]๊ณผ ๋น๊ต → 7 ์ฐพ์ → answer[4] = 4
2. pop(7) → [6, 9, 5]์ ๋น๊ต → 9 ์ฐพ์ → answer[3] = 2
3. pop(5) → [6, 9]์ ๋น๊ต → 9 ์ฐพ์ → answer[2] = 2
4. pop(9) → [6]๊ณผ ๋น๊ต → ์์ → answer[1] = 0
5. pop(6) → []์ ๋น๊ต → ์์ → answer[0] = 0
- ๋ฐฐ์ด์ Stack์ฒ๋ผ ์ฌ์ฉํ๋ค.
- ๋งจ ๋ค(์ค๋ฅธ์ชฝ)๋ถํฐ `pop()` ํ๋ฉด์ ์ฒ๋ฆฌํ๋ค.
- `pop()`๋ ๊ฐ๊ณผ ๋จ์ ๋ฐฐ์ด(์ผ์ชฝ ํ๋ค)์ ๋น๊ตํ๋ค.
- ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ํ์ ์ฐพ์ผ๋ฉด ํด๋น ์์น ์ ์ฅํ๋ค.
def get_receiver_top_orders_stack(heights):
answer = [0] * len(heights)
while heights:
# ๋งจ ๋ค(์ค๋ฅธ์ชฝ) ํ ๊บผ๋ด๊ธฐ
height = heights.pop()
# ๋จ์ ๋ฐฐ์ด(์ผ์ชฝ ํ๋ค)์ ์ญ์์ผ๋ก ํ์
for index in range(len(heights) - 1, -1, -1):
# ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ํ ๋ฐ๊ฒฌ
if height <= heights[index]:
# ํ์ฌ ๋จ์ ๋ฐฐ์ด์ ๊ธธ์ด = ์๋ ๋ฐฐ์ด์์์ ์ธ๋ฑ์ค
answer[len(heights)] = index + 1
break
return answer