본문 바로가기

프로그래머스 알고리즘 문제/Level 2

(6)
프로그래머스 Level 2 - 더 맵게 내 정답: import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) while scoville and scoville[0] < K: min1, min2 = -1, -1 min1 = heapq.heappop(scoville) if scoville: min2 = heapq.heappop(scoville) else: return min2 new = min1 + min2*2 heapq.heappush(scoville, new) answer += 1 return answer 다른사람들의 정답을 보아도 대부분 heapq 모듈을 이용하여 구현했다.
프로그래머스 Level 2 - 기능개발 내 정답: 꼼수를 좀 썼다. def solution(progresses, speeds): baepo = [] answer = [] for i in range(len(progresses)): day = (99.9 - progresses[i]) // speeds[i] + 1 baepo.append(day) while baepo: baepo_now = baepo.pop(0) count = 1 while baepo and baepo_now >= baepo[0]: baepo.pop(0) count += 1 answer.append(count) return answer 다른 사람들의 정답: def solution(progresses, speeds): Q=[] for p, s in zip(progresses, spe..
프로그래머스 Level 2 - 스킬트리 내 정답: 선행 스킬들을 제외한 다른 스킬들을 모두 제외시킨 스트링을 만든 후 남은 스킬들이 선행 스킬 트리를 그대로 따르는지를 테스트하는 방식으로 진행했다. def solution(skill, skill_trees): answer = 0 for st in skill_trees: st_cut = ''.join(list(filter(lambda x: x in skill, st))) for i in range(-1,len(skill)): if skill[:i+1] == st_cut: answer += 1 break return answer 다른 사람들의 정답: 스킬들을 앞에서 하나씩 제거해가며 실제 선행 스킬 트리와 비교하는 방식으로 진행했다. def solution(skill, skill_trees): a..
프로그래머스 Level 2 - 주식 가격 내 정답: 정말 가격해버리고 싶은 문제였다. 권장이 O(n)이라는데 내 얄팍한 지식으론 O(n)을 도저히 못맞추겠더라. 아래는 O(n^2)인 알고리즘이다. def solution(prices): length = len(prices) answer = [] for i in range(length): answer.append(length-i-1) for j in range(i+1, length): if prices[i] > prices[j]: answer.pop() answer.append(j-i) break return answer 다른 사람들의 정답: 딱히 O(n) 인 정답을 찾을 수 없었다. 어떻게 풀 수 있는지 좀 궁금하다.
프로그래머스 Level 2 - 124 나라의 숫자 내 정답: def solution(n): answer = '' while n != 0: if n%3 == 0: answer = '4' + answer n = n//3-1 else: answer = str(n%3) + answer n = n//3 return answer 다른 사람들의 정답: def change124(n): num = ['1','2','4'] answer = "" while n > 0: n -= 1 answer = num[n % 3] + answer n //= 3 return answer
프로그래머스 Level 2 - 다리를 지나는 트럭 내 정답: def solution(bridge_length, weight, truck_weights): def appendTruck(arr, truck_weight): arr.append([truck_weight, 0]) bridge = [] appendTruck(bridge, truck_weights.pop(0)) t = 0 wsum = 0 while len(truck_weights) > 0 or len(bridge) > 0: t += 1 for truck in bridge: truck[1] += 1 for truck in bridge: if truck[1] > bridge_length: bridge.pop(0) if truck_weights and sum(truck[0] for truck in bri..