코딩테스트

하루 코테 3개 풀기 - 16일차

songsua 2024. 12. 28. 01:19

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