알고리즘/스택,큐6 [프로그래머스] 주식가격 - 파이썬(python) 시간 초과된 풀이 def solution(prices): answer = [] q = [(i,j) for i,j in enumerate(prices[::-1])] for i in range(len(q)) : tmp = list(filter(lambda x: x[1] < q[i][1], q[:i]))[-1:] if tmp == [] : answer.append(i) else : answer.append(i-tmp[0][0]) return answer[::-1] 처음에는 주어진 prices 를 역순하여 (인덱스, 가격) 으로 저장하였다. 그런다음, filter 를 사용하여 해당 인덱스 보다 앞에서 더 큰 가격 중 가장 마지막 가격과의 인덱스 차이를 저장하였다. 한편, 앞에서 나보다 더 큰 가격이 없었다면 가.. 알고리즘/스택,큐 2022. 9. 3. [프로그래머스] 다리를 지나는 트럭 - 파이썬(python) 나의 풀이 def solution(bridge_length, weight, truck_weights): count = len(truck_weights) crossing = [] # [트럭무게, 현재 몇칸을 지나고 있는지] complete = [] # 다리를 다 건넌 트럭 무게 time = 0 while count != len(complete) : if truck_weights : if len(crossing) < bridge_length and sum([i[0] for i in crossing]) + truck_weights[0] = bridge_length : complete.append(crossing[0][0]) crossing.pop(0) return (time+1) 시간이 많이 걸렸는데, 어떻게.. 알고리즘/스택,큐 2022. 9. 3. [프로그래머스] 프린터 - 파이썬(python) ✅ 나의 풀이 def solution(priorities, location): waiting = [(i,j) for i,j in enumerate(priorities)] complete = [] while waiting : if waiting[0][1] < max(waiting, key = lambda x:x[1])[1] : waiting.append(waiting[0]) waiting.pop(0) else : complete.append(waiting[0]) waiting.pop(0) for num, i in enumerate(complete) : if i[0] == location : return num+1 [ (0,2), (1,1) , (2,3) , (3,2) ] 와 같이 (처음 시작할 때의 인덱스.. 알고리즘/스택,큐 2022. 9. 2. [프로그래머스] 올바른 괄호 - 파이썬(python) 나의 풀이 def solution(s): stack = [] for i in s : if i == '(' : stack.append('(') else : if stack : stack.pop() else : return False return stack==[] ( 를 stack 에 넣고, )가 나오면 stack에 있는 ( 를 상쇄시킬 것이다. 만약 stack 에 아무것도 없다면? (가 나오지 않았는데 ) 가 나온 것이므로 false 를 리턴해야 한다. 한편, 반복문을 모두 돈 후에도 stack 이 비어있지 않다면 ) 의 개수가 ( 보다 더 많음을 의미하므로 false 를 리턴한다. 다른 풀이 아주 감탄한 풀이... 심지어 내가 푼 방법보다 훨씬 쉽다. 오히려 단순하게 생각하는 것도 연습이 필요한 것 같다.. 알고리즘/스택,큐 2022. 9. 2. [프로그래머스] 같은 숫자는 싫어 - 파이썬(python) 나의 풀이 def solution(arr): answer = [] for i in arr : if answer : if answer[-1] != i : answer.append(i) else : answer.append(i) return answer 빈 배열일 때는 원소에 접근을 할 수 없어 if answer 로 answer 배열이 빈 배열인지 확인하는 조건을 추가했다. 그런데..! 다른 분의 풀이를 보고 새로운 사실을 알게 되었다. 다른 풀이 def no_continuous(s): a = [] for i in s: if a[-1:] == [i]: continue a.append(i) return a 나는 배열[-1] 로 마지막 원소에 접근을 하였는데, 이분은 배열[-1:] 로 리스트끼리의 비교를 하였다.. 알고리즘/스택,큐 2022. 9. 2. [프로그래머스] 기능개발 - 파이썬(python) 나의 풀이 from math import ceil def solution(progresses, speeds): releases = [] step = -1 # releases list 의 index (각 배포 index) tmp = 0 # 기준이 되는 앞에 있는 기능의 배포일수 for i,progress in enumerate(progresses): if (ceil((100-progress)/speeds[i]) step += 1 그리고 기준이 되는 작업의 배포일 tmp 를 7일로 설정한다. 그리고, release 리스트의 첫 번째 배포에 1개의 기능을 추가한다. 다음으로 30 을 탐색한다. (100-30)/30 + 1 = 3일은 tmp 의 7일보다 작으므로, 93 작업이 배포될 때 함께 배포될 수 있다. .. 알고리즘/스택,큐 2022. 5. 7. 이전 1 다음