[TIL_Carrotww] 21 - 22/09/28

์œ ํ˜•์„ยท2022๋…„ 9์›” 28์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
25/138
post-thumbnail

๐Ÿ“Carrotww์˜ ์ฝ”๋”ฉ ๊ธฐ๋ก์žฅ

๐Ÿ’ก Stack & queue Algorithm

๐Ÿงฒ ์˜ค๋Š˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1

๐Ÿ”์ฃผ์‹๊ฐ€๊ฒฉ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level2

  • ์ฒซ ๋ฒˆ์งธ ํ’€์ด
def solution(prices):
    result = [0] * len(prices)
    temp = list(zip(prices, range(1, len(prices) + 1)))
    for te, nu in temp:
        for te2, nu2 in temp[nu:]:
            if te <= te2:
                result[nu - 1] += 1
            else:
                result[nu - 1] += 1
                break
    return result

  • ๋‘ ๋ฒˆ์งธ ํ’€์ด
def solution(prices):
    result = [0] * len(prices)
    for i in range(len(prices)):
        for j in range(i + 1, len(prices)):
            if prices[i] <= prices[j]:
                result[i] += 1
            else:
                result[i] += 1
                break
    return result

  • ์„ธ ๋ฒˆ์งธ ํ’€์ด
def solution(prices):
    length = len(prices)
    result = [x for x in range(length - 1, -1, -1)]
    stack = []
    for i in range(length):
        while stack and prices[i] < prices[stack[-1]]:
            temp = stack.pop()
            result[temp] = i - temp
        stack.append(i)
    return result

๋„๋ฌด์ง€ stack์„ ํ™œ์šฉํ•˜์—ฌ ํ’€ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.
result ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ ์ด์œ ๋Š” for ๋ฌธ์•ˆ์—์„œ ์˜ˆ์‹œ์˜ index 0 ์ž๋ฆฌ์— ์žˆ๋Š” 1 ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฆฌ์ŠคํŠธ ์•ˆ์—์„œ 1๋ณด๋‹ค ์ž‘์•„์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์–ด ์ˆซ์ž ๊ฐฑ์‹ ์ด ๋˜์ง€ ๋ชปํ•œ๋‹ค

result = [0] * len(prices)
#์ƒ๋žต
while stack:
	temp = stack.pop()
    result[temp] = len(prices) - 1 - temp

์œ„์™€ ๊ฐ™์€ ์‹์œผ๋กœ ๋งˆ์ง€๋ง‰์— stack์— ๋‚จ์•„์žˆ๋Š” ๋ถ€๋ถ„๋“ค์„ ์ฒ˜๋ฆฌํ•ด์ค˜๋„ ๋˜์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ์—ญ์ˆœ์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œํ‚จ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์€ ์ž” ์ฒ˜๋ฆฌ ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•  ํ•„์š” ์—†์œผ๋ฏ€๋กœ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค.

ํ™•์‹คํžˆ stack์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰์„ ํ•˜๋‹ˆ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋‹จ์ถ•๋˜์—ˆ๋‹ค.

๐Ÿงฒ ์˜ค๋Š˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2

๐Ÿ” ํ”„๋ฆฐํ„ฐ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level2

  • ๋‚ด ํ’€์ด stack, queue ํ™œ์šฉ (์ •๋‹ต)
from collections import deque

def solution(priorities, location):
    stack = [[-1, -1]]
    temp = zip(priorities, range(len(priorities)))
    queue = deque(temp)
    while stack[-1][1] != location:
        value = queue.popleft()
        for pr, num in queue:
            if value[0] < pr:
                queue.append(value)
                break
        else:
            stack.append(value)

    return len(stack) - 1
  1. temp list์— ์ฃผ์–ด์ง„ priorities ๊ฐ’๊ณผ ํ•ด๋‹น ๊ฐ’์˜ location์ธ ์ธ๋ฑ์Šค๋ฅผ zip์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ™์ด ๋ฌถ์–ด ์ฃผ์–ด
  2. while ๋ฌธ์„ ์ˆ˜ํ–‰ํ• ๋•Œ stack ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” location ๊ฐ’์ด ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ location๊ณผ ๊ฐ™์œผ๋ฉด while ๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  3. queue ์™ผ์ชฝ(์•ž๋ถ€๋ถ„) ์—์„œ ํ”„๋ฆฐํŠธ ํ•ด๋„ ๋˜๋Š”์ง€ value์— ์ €์žฅ์„ ํ•œ ํ›„
    queue ์— ๋‚จ์•„์žˆ๋Š” ๊ฐ’๋“ค๊ณผ ๋น„๊ต๋ฅผ ํ•˜์—ฌ ๋” ํฐ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด queue์˜ ๋งจ ๋’ค๋กœ ๋ณด๋‚ธ ํ›„ for ๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  4. for๋ฌธ์—์„œ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ด ์—†๋‹ค๋ฉด else ๋ฌธ์„ ํƒ€ stack์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค (ํ”„๋ฆฐํŠธ ๋œ๋‹ค)
  • ํ’€์ด๋ฅผ ์ ์œผ๋ฉฐ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ stack์€ ํ™œ์šฉ์„ ์•ˆํ–ˆ๋‹ค...ใ…‹ใ…‹
    ์ฒ˜์Œ์— ๋ฌด์ž‘์ • stack์„ ํ™œ์šฉํ•˜์—ฌ ํ’€์–ด๋ณด์ž๋Š” ๋ชฉ์ ์œผ๋กœ list ๋ณ€์ˆ˜ ๋ช…์„ stack์œผ๋กœ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ ํ’€๊ณ ๋ณด๋‹ˆ stack์€ ์•„๋‹Œ๊ฑธ๋กœ...ใ…Ž
    deque๋ฅผ ํ™œ์šฉํ•œ ํ’€์ด์ด๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ํ’€์ด
from collections import deque

def solution(priorities, location):
    stack = []
    queue = deque([(x, y) for x, y in enumerate(priorities)])
    cnt = 0

    while 1:
        temp_num, temp_pr = queue.popleft()
        if any(temp_pr < x[1] for x in queue):
            queue.append((temp_num, temp_pr))
        else:
            cnt += 1
            if temp_num == location:
                return cnt

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ์ธ๋ฐ ๊ทธ ๋ถ„์€ deque๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์—์„œ pop[0]์„ ํ•˜์—ฌ ํ’€์ด๋ฅผ ํ•˜์˜€๋‹ค.
๋‚œ pop[0] ์„ ํ•˜๊ฒŒ๋˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ N์ด ๋˜๊ธฐ๋•Œ๋ฌธ์— deque๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ž๋ฃŒํ˜•์„ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๊ณ 
cnt ๊ฐ’์„ ์ค€ ๊ฒƒ๊ณผ any() ๋ฅผ ์‚ฌ์šฉํ•œ๊ฒƒ์ด ๋‚˜์™€ ๋‹ค๋ฅธ ์  ์ด์˜€๋‹ค.
ํ™•์‹คํžˆ cnt๋ฅผ ์ฃผ๊ณ  return์„ ๋ฐ”๋กœ ํ•ด์ฃผ๋‹ˆ ๊น”๋”ํ•˜๊ธฐ๋Š” ํ•˜๋‹ค.

๋ช‡ ๊ฐœ ๋” ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค
์˜ค๋Š˜ ๋!

0๊ฐœ์˜ ๋Œ“๊ธ€