728x90

𝘼𝙣𝙖𝙡𝙮𝙨𝙞𝙨/ᴀʟɢᴏʀɪᴛʜᴍ 61

[Python] 프로그래머스 - 프로세스 [스택/큐]

https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr from collections import dequedef solution(priorities, location): answer = 0 dq = deque() #prio dq_idx = deque() #prio 인덱스 num = [0] * 101 for i in priorities : dq.append(i) for i in ra..

[Python] 짝지어 제거하기 (deque)

https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(s): s_list = list(s) for j in range(len(s_list)//2) : for i in range(len(s_list)-1) : if s_list[i] == s_list[i+1] : s_list.pop(i) s_list.pop(i) break if len(s_list) == 0 : return 1 return 0 시간초과 에러뜸! 인덱싱 방식은 오래..

Python fibo

재귀함수 사용시 런타임 에러날때, def solution(n): pre = 0 # 이전 피보나치 수를 저장하는 변수 current = 1 # 현재 피보나치 수를 저장하는 변수 # 2부터 n까지 순회 for i in range(2, n+1): # 현재 피보나치 수는 이전 두 피보나치 수의 합 # 이전 피보나치 수는 갱신하기 전의 현재 피보나치 수 current, pre = current + pre, current # n번째 피보나치 수를 1234567로 나눈 나머지를 반환 return current % 1234567

다이나믹 프로그래밍

메모리를 적절히 사용해 수행 시간 효율성을 비약적으로 향상시키는 방법 다이나믹 프로그래밍 = 동적 계획법 동적 할당 : 프로그램이 실행되는 도중에 실해에 필요한 메모리를 할당하는 기법 조건1) 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있음 조건2) 중복되는 부분 문제 : 동일한 작은 문제를 반복적으로 해결해야 함 EX. 피보나치 수열 - 점화식 : 인접한 항들 사이의 관계식 - 이런 수열을 배열이나 리스트를 이용해 표현함 # 피보나치 함수를 재귀함수로 구현 def fibo(x) : if x == 1 or x == 2 : return 1 return fibo(x-1) + fibo(x-2) - 지수 시간 복잡도를 가짐! - 비효율적인 문제 - ..

이진 탐색 알고리즘

이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 시간 복잡도 : O(log N) # 이진 탐색 소스코드 구현 (재귀 함수) def binary_search(array, target, start, end) : if start > endd : return None # 찾은 경우 중간점 인덱스 반환 if array[mid] == target : return mid # 중간점의 값보다 찾고자 하는 값이 작은 경우 왼쪽 확인 elif array[mid] > target : return binary_search(array, target, start, mid - 1) # 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인 else : return binary_search..

정렬 알고리즘

선택 정렬 : 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 시간 복잡도 : O(N^2) array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)) : min_inex = i # 가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] #스와프 삽입 정렬 : 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입 시간 복잡도 : O(N^2) (반복문 두번 중첩) array = [7, 5, 9..

728x90