728x90

이 문제의 핵심은 현재 상황에서 가장 무거운 사람과 가장 가벼운 사람의 무게를 합친 무게가 주어진 무게 제한보다 작거나 같도록 짝꿍을 짓는 것입니다. 몸무게를 정렬해준 후 왼쪽 끝에서부터와 오른쪽 끝에서부터의 무게를 비교하여 최대한 많이 짝꿍을 지어줍니다. 

솔루션

def solution(people, limit):
    people=sorted(people)
    count,left,right=0,0,len(people)-1
    
    while left <= right:
        queue=[]
        if people[right]+people[left] <= limit:
            left+=1
        right-=1
        count+=1
    return count

 

728x90
728x90

 

이번 문제에서는 스택을 사용하여 문제를 풀어보았습니다. number의 자리수가 1,000,000자리이기 때문에 시간초과를 유의해야 합니다. 앞에서부터 차례대로 숫자를 stack에 저장하다가, 뒤에 나온 숫자가 저장된 숫자보다 클 시 pop해주고 뒤에 나온 숫자를 저장합니다. k개의 수를 제거할 수 있으므로 pop을 해줄 때마다 count를 해줍니다. 그 후, 만일 k가 양수라면 뒤에부터 k개만큼 제거하여 반환합니다.

 

솔루션

def solution(number, k):
    answer = ''
    idx=0
    a=['-1']
    num = len(number)
    length=num-k
    for i in range(len(number)):
        while a and a[-1] < number[i] and k>0:
            a.pop()
            k-=1
        a.append(number[i])
        
    return ''.join(a[:-k])
728x90

+ Recent posts