- ํ์ด์ฌ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ์ง ์์ง๋ง, ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ์คํ์ ๊ตฌํํ ์ ์๋ค.
- ์คํ์ LIFO(Last In, First Out) ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, ๋ง์ง๋ง์ ์ถ๊ฐ๋ ํญ๋ชฉ์ด ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ ๊ตฌ์กฐ
- ํ์ด์ฌ ๋ฆฌ์คํธ์ ๋ช ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ์ ๊ธฐ๋ณธ ์ฐ์ฐ์ ๊ตฌํํ ์ ์๋ค.
1.์คํ ์ฐ์ฐ
- push: ์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ์ฐ์ฐ
stack = []
stack.append(10) # ์คํ์ 10 ์ถ๊ฐ
stack.append(20) # ์คํ์ 20 ์ถ๊ฐ
print(stack) # ์ถ๋ ฅ: [10, 20]
- pop: ์คํ์์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ ์ฐ์ฐ
popped_element = stack.pop() # ์คํ์์ ๊ฐ์ฅ ์์ ์๋ 20์ ์ ๊ฑฐํ๊ณ ๋ฐํ
print(popped_element) # ์ถ๋ ฅ: 20
print(stack) # ์ถ๋ ฅ: [10]
- isFull: ์คํ์ด ๊ฐ๋ ์ฐผ๋์ง ํ์ธํ๋ ์ฐ์ฐ (ํ์ด์ฌ ๋ฆฌ์คํธ๋ ๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๋์ด๋๋ฏ๋ก ๋ฐ๋ก ๊ตฌํํ์ง ์์)
max_size = 10
def isFull(stack):
return len(stack) == max_size
print(isEmpty(stack)) # ์ถ๋ ฅ: False (์คํ์ 10์ด ์์)
- isEmpty: ์คํ์ด ๋น์ด ์๋์ง ํ์ธํ๋ ์ฐ์ฐ
def isEmpty(stack):
return len(stack) == 0
print(isEmpty(stack)) # ์ถ๋ ฅ: False (์คํ์ 10์ด ์์)
- top (peek): ์คํ์ ๊ฐ์ฅ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋, ์ ๊ฑฐํ์ง ์์
def top(stack):
if isEmpty(stack):
return None
return stack[-1]
print(top(stack)) # ์ถ๋ ฅ: 10 (์คํ์ ๋งจ ์ ์์)
์ฝํ
์์ ๊ดํธ ๋ฌธ์ ๋์ค๋ฉด ์คํ ์๊ฐ!
์ง์ ์ง๋๋ค ๋์ค๋ฉด ์คํ ์๊ฐ!
์ด๋ค ๋ชจ๋ ๊ฐ์ฅ ์ต๊ทผ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ ์๋ฆฌ -> ์คํ
๋ฌธ์
'''
s=(())() return True
s=((())() return False
'''
def solution(s):
stack=[]
for i in s:
if i =='(':
stack.append(i)
elif i ==')':
if stack:
stack.pop()
else:
return False
if stack:
return False
else:
return True
print(solution("(())()"))
print(solution("((())()"))
'''
10์ง์ -> 2์ง์
decimal: 10, ๋ฐํ๊ฐ: 1010
decimal: 27, ๋ฐํ๊ฐ: 11011
decimal: 12345, ๋ฐํ๊ฐ: 11000000111001
'''
def solution(decimal):
stack=[]
while decimal>=1:
na = decimal%2
decimal = decimal//2
stack.append(str(na))
return ''.join(stack[::-1])
print(solution(10))
print(solution(27))
print(solution(12345))
https://school.programmers.co.kr/learn/courses/30/lessons/76502
์ด ๋ฌธ์ ์์ ์ด ๋ถ๋ถ ์๊ฐํ๋๊ฒ ํ๋ค์๋ค.
ํ์ ์ํจ ๋ฐฐ์ด์ ์๊ฐํด๋ณด์
n = len(s)
for i in range(n):
stack = [ ]
for j in range(n):
c = s[(i + j) % n]
'''
s= "[](){}" result =3
'''
def solution(s):
answer=0
n = len(s)
for i in range(n):
stack = []
for j in range(n):
c= s[(i+j) %n]
if c=="(" or c=="[" or c =="{":
stack.append(c)
else:
if not stack:
break
if c ==")" and stack[-1] == "(":
stack.pop()
elif c =="}" and stack[-1] == "{":
stack.pop()
elif c =="]" and stack[-1] == "[":
stack.pop()
else:
break
else:
if not stack:
answer += 1
return answer
print(solution("[](){}"))
์คํ๋ฌธ์ ์์ ๋ง์ด ์ค์ํ๋ ๋ถ๋ถ: ์คํ์ด ๋น์๋์ง ์ฒดํฌํด์ผ ํ๋ค.
https://school.programmers.co.kr/learn/courses/30/lessons/12973
'''
s="baabaa" result = 1
s="cdcd" result = 0
'''
def solution(s):
stack=[]
for c in s:
if not stack: #stack์ด ๋น์์ผ๋ฉด
stack.append(c)
else: #stack์ ๋น์ด์์ง ์๋ค๋ฉด
if stack[-1] == c: #๊ฐ์ฅ ๋ง์ง๋ง๊ฐ๊ณผ ๋น๊ตํด์ ๊ฐ๋ค๋ฉด, ๋ง์ง๋ง๊ฐ ์ญ์
stack.pop()
else: #๋ค๋ฅด๋ฉด, c๋ ์คํ์ ์ถ๊ฐ
stack.append(c)
if not stack:
return 1
else:
return 0
print(solution("cdcd"))
https://school.programmers.co.kr/learn/courses/30/lessons/42584
'''
prices=[1, 2, 3, 2, 3]
return = [4, 3, 1, 1, 0]
'''
def solution(prices):
arr=[]
for i in range(len(prices)):
time=0
for j in range(i+1,len(prices)):
time+=1
if prices[i]>prices[j]:
break
arr.append(time)
return arr
print(solution([1, 2, 3, 2, 3]))
https://school.programmers.co.kr/learn/courses/30/lessons/64061
'''
board = [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]]
moves = [1,5,3,5,1,2,1,4]
result = 4
[0,0,0,0,0],
[0,0,1,0,3],
[0,2,5,0,1],
[4,2,4,4,2],
[3,5,1,3,1]
'''
def solution(board, moves):
cnt = 0
stack=[]
# for i in moves:
# if i==1:
# #board์ 1๋ฒ์งธ์ด ์ค ๊ฐ์ฅ ํ์ด ๋ฎ์ 0์ด ์๋ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ , ํด๋น ๊ฐ์ stack์ ์ถ๊ฐ
# elif i == 2:
# #board์ 2๋ฒ์งธ์ด ์ค ๊ฐ์ฅ ํ์ด ๋ฎ์ 0์ด ์๋ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ , ํด๋น ๊ฐ์ stack์ ์ถ๊ฐ
# elif i == 3:
# #board์ 3๋ฒ์งธ์ด ์ค ๊ฐ์ฅ ํ์ด ๋ฎ์ 0์ด ์๋ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ , ํด๋น ๊ฐ์ stack์ ์ถ๊ฐ
# elif i == 4:
# #board์ 4๋ฒ์งธ์ด ์ค ๊ฐ์ฅ ํ์ด ๋ฎ์ 0์ด ์๋ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ , ํด๋น ๊ฐ์ stack์ ์ถ๊ฐ
# elif i == 5:
# #board์ 5๋ฒ์งธ์ด ์ค ๊ฐ์ฅ ํ์ด ๋ฎ์ 0์ด ์๋ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ , ํด๋น ๊ฐ์ stack์ ์ถ๊ฐ
# #stack์ -> [4,3,1,1,3,2,4] ๋จ๊ฒ ๋๊ณ ,
# stack=[4,3,1,1,3,2,4]
for move in moves:
col = move - 1 # moves๋ 1-based, ํ์ด์ฌ์ 0-based์ด๋ฏ๋ก -1
for row in range(len(board)): # ํด๋น ์ด์์ ๊ฐ์ฅ ์์ ์๋ ์ธํ์ ์ฐพ๋ ๋ฃจํ
if board[row][col] != 0: # 0์ด ์๋ ๊ฐ์ ์ฐพ์ผ๋ฉด ๊ทธ ์ธํ์ ๋ฝ์
stack.append(board[row][col]) # ์ธํ์ ๋ฝ์
board[row][col] = 0 # ํด๋น ์๋ฆฌ๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ (์ธํ ๋ฝ์)
break
i = 0
cnt = 0
while i < len(stack) - 1: # i๊ฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ณด๋ค ์์ ๋๊น์ง๋ง ๋ฐ๋ณต
j = i + 1
if stack[i] == stack[j]:
stack.pop(j) # j๋ฒ์งธ ๊ฐ์ ๋จผ์ ์ ๊ฑฐ
stack.pop(i) # i๋ฒ์งธ ๊ฐ์ ์ ๊ฑฐ
cnt += 1
# i์ j๋ฅผ ๋ค์ 0์ผ๋ก ์ค์ ํ์ฌ ์ฒ์๋ถํฐ ๋ค์ ๊ฒ์ฌ
i = 0
else:
i += 1 # ๊ฐ์ด ๋ค๋ฅด๋ฉด ๋ค์์ผ๋ก ์ด๋
return cnt*2
# ์์๋๋ก 4, 4, 0 ๋์์ผ ํ๋ค.
print(solution([[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]], [1,5,3,5,1,2,1,4]))
print(solution([[1, 0, 0, 0, 0], [2, 0, 0, 0, 0], [2, 0, 0, 0, 0], [1, 0, 0, 0, 0], [3, 0, 0, 0, 0]], [1, 1, 1, 1]))
print(solution( [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], [1, 2, 3, 4, 5]))
'๐ฏ์๊ณ ๋ฆฌ์ฆ > ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋ฆฌ (0) | 2024.10.04 |
---|---|
ํด์ (3) | 2024.10.03 |
ํ (1) | 2024.10.03 |
๋ฐฐ์ด (1) | 2024.09.09 |
์ฝํ ์ ๋ฆฌ (0) | 2024.09.09 |