시간복잡도/디버깅
·
Algorithm/알고리즘 이론
시간복잡도 시간복잡도: 주어진 문제를 해결하기 위한 연산 횟수 시간 복잡도 유형 빅-오메가$( \Omega(n))$: 최선일 때(best case)의 연산 횟수 빅-세타$(\theta(n))$: 보통일 때(avarge case)의 연산 횟수 빅-오$(O(n))$: 최악일 때(worst case)의 연산 횟수 연산 횟수 계산 방법 연산 횟수 = 알고리즘 시간 복잡도 n값에 데이터의 최대 크기를 대입하여 도출 시간 복잡도 도출 기준 상수는 시간 복잡도 계산에서 제외 ex) $ 3N $ → $ N $ 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 됨 ex) $ N^2 + 10N $ → $ N^2 $ 디버깅 디버깅(debugging): 프로그램에서 발생하는 문법 오류나 논리 오류를 찾아 바로잡는 ..
프로그래머스 | 연속된 부분 수열의 합 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 시간 초과^^ def solution(sequence, k): # 합 배열 s = [0] * (len(sequence)+1) for n in range(1, (len(sequence)+1)): s[n] = s[n-1] + sequence[n-1] # 구간 합 answer = [] min_len = 1000001 for i in range(len(sequence)+1): for j in range(i, len(sequence)+1): if s[j] - s[i-1] == k and j-i < min_len: if..
프로그래머스 | 두 큐 합 같게 만들기 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 단순한 큐를 이용한 문제라 생각하고 접근했으나 조건들로 인해 실패했던 과정을 하나하나 코드와 함께 작성했다. 발생할 수 있는 모든 경우를 겪고 정리했으니 다들 여기서 해답을 찾으시길 바랍니다! 시행착오 1 from collections import deque def solution(queue1, queue2): queue1, queue2 = deque(queue1), deque(queue2) answer = 0 # 원소는 정수이므로 두 큐의 합이 홀수이면 어떻게 해도 각 큐의 합을 정수로 같게 만들 수 없음(..
프로그래머스 | 다리를 지나는 트럭 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 def solution(bridge_length, weight, truck_weights): bridge = [0] * bridge_length # 다리 onbridge = sum(bridge) # 다리 위 트럭 하중 answer = 0 # 시간 # 다리 위의 트럭이 없을 때까지(=모든 트럭이 다리를 건널 때 까지) while bridge: answer += 1 onbridge -= bridge.pop(0) # 맨 앞에 위치한 트럭이 다리를 지나면 하중 감소 # 남은 대기 트럭이 있으면 if truck_..
프로그래머스 | 롤케이크 자르기 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 시도한 코드 def solution(topping): answer = 0 for i in range(1,len(topping)): left = set(topping[:i]) right = set(topping[i:]) if len(left)==len(right): answer += 1 return answer 토핑의 가짓수를 구해야 하므로 호기롭게 set으로 코드를 작성하고 제출했지만 마주친 결과는 시간초과였다. 어떻게 시간초과를 해결해야 할지 모르겠어서 힌트를 찾아본 결과 딕셔너리를 이용하면 시간을 줄..
프로그래머스 | 더 맵게 [파이썬 python]
·
Algorithm/프로그래머스
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 import heapq def solution(scoville, K): answer = 0 # 섞은 횟수 heapq.heapify(scoville) # 최소 heap # 새로운 스코빌 지수 계산이 가능할 때(len >= 2) while len(scoville) >= 2: min1 = heapq.heappop(scoville) # 최소값이 K 이상이면 조건을 만족하므로 반복문 종료 if min1 >= K: return answer # 최소값이 K 미만이면 새로운 스코빌 지수 계산 else: min2 = h..