1. 탑
https://www.acmicpc.net/problem/2493
이중 반복문으로 풀었을때,
def get_receiver_top_orders(heights):
answer = [0] * len(heights)
for i in range(len(h)-1, 0, -1):
for j in range(i-1, -1, -1):
if heights[i] <= heights[j]:
answer[i] = j + 1
break
return answer
스택을 활용해서 풀어보자
def get_receiver_top_orders(heights):
answer = [0] * len(heights)
while heights:
height = heights.pop()
for idx in range(len(heights) - 1, -1, -1)#3~0까지 거꾸로 진행:
if height <= heights[idx]:
answer[len(heights)] = idx + 1
break
return answer
2. 주식가격
https://school.programmers.co.kr/learn/courses/30/lessons/42584
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(prices):
answer = [0]*len(prices)
for i in range(len(prices)) :
for j in range(i+1, len(prices)) :
if prices[j] >= prices[i] :
answer[i] +=1
else:
answer[i] +=1
break
return answer
하지만, 스택,큐문제이기 때문에 스택 큐를 활용하여 풀어보자!
- enqueue(data) : 맨 뒤에 데이터 추가하기
- dequeue() : 맨 앞의 데이터 뽑기
- peek() : 맨 앞의 데이터 보기
- isEmpty(): 큐가 비었는지 안 비었는지 여부 반환해주기
from collections import deque
def solution(prices):
answer = 0
result = []
price_que = deque(prices)
while price_que : #price가 비어있지 않다면 계속 반복된다
answer = 0
current_price = price_que.popleft() #맨앞에 있는 값을 뽑아올 것이다.
for i in price_que :
if current_price <= i :
answer += 1
else :
answer += 1
break
result.append(answer)
return result
3. 정사각형으로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181830
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(arr):
n = len(arr[0]) # 열의 개수
m = len(arr) # 행의 개수
# 행이 열보다 적은 경우, 행을 추가
if n > m:
for _ in range(n - m):
arr.append([0] * n)
# 열이 행보다 적은 경우, 각 행에 열을 추가
elif n < m:
for i in range(m):
arr[i].extend([0] * (m - n))
return arr
'코딩테스트' 카테고리의 다른 글
하루 코테 3개 풀기 - 18일차 (1) | 2024.12.28 |
---|---|
하루 코테 3개 풀기 - 17일차 (1) | 2024.12.28 |
하루 코테 3개 풀기 - 15일차 (0) | 2024.12.24 |
하루 코테 3개 풀기 - 14일차 (0) | 2024.12.23 |
하루 코테 3개 풀기 - 13일차 (0) | 2024.12.23 |