본문 바로가기

알고리즘5

효율을 높이는 방법 - 반복되는 규칙 나의 습관(사족) 나는 알고리즘을 풀 때 문제에서 주어진 과정 그대로 따라 푸는 방식을 선호한다. 그래서 효율성을 요구하는 문제에서 자주 막히게 된다. 사실 이러한 문제는 알고리즘 자체보다는 문제 해결 논리 자체에 대한 센스를 평가하는 경우가 많다. 그래서 내가 푼 코드에서 사용한 자료구조를 바꾼다거나 약간의 알고리즘을 변경한다고 해서 풀리는 경우는 거의 없다.(재귀 -> 큐 또는 스텍의 경우 풀리는 경우가 많다.) 또 자료구조나 알고리즘을 평가하는 문제같은 경우 풀면서 감이 잡히고 비슷한 유형을 보면 바로 해결할 수라도 있지만 효율성 문제들의 경우 유형이 정해진 것이 아니라서 매번 풀 때마다 늘 새로움을 느낀다. 사실 위의 말은 내 핑계일 수도 있지만 내게 어려운 걸 어렵다고 얘기하는 게 잘못된 것은 .. 2021. 8. 16.
효율을 높이는 방법 - 조건문 1. 중복 조건 비교 제거 def med3(a, b, c): if (b >= a and c b and c b): return b return c 위의 코드에서 if와 elif의 조건을 보면 a와 b의 값 비교가 중복되어 있음을 알 수 있다. 이러한 비교 조건의 중복은 코드의 효율을 나쁘게 만드는 요소이다. 2. 반복문 안에 조건문 제거 sum = 0 for i in range(a, b + 1): if i < b: print(f'{i} + ', end='') else: print(f'{i} = ', end='') sum += i 위의 코드는 반복문 안에 조건문이 있는 구조로 반복될 때마다 조건문이 실행되는 비효율적인 구조를 띄고 있다. 조건을 살펴보면 카운터용 변수.. 2021. 8. 16.
Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편 - 03 검색 알고리즘 요약 검색 알고리즘이란? 검색과 키 키 검색 조건으로 주목하는 항목이며 대부분 데이터의 일부이다. 검색에서는 조건을 하나만 지정할 수 있고 논리곱, 논리합을 사용하여 복합해서 지정할 수 있다. 검색의 종류 선형 검색: 무작위로 늘어놓은 데이터 집합에서 검색을 진행한다. 이진 검색: 일정한 규칙으로 늘어놓은 데이터 집합에서 아주 빠른 검색을 수행한다. 해시법: 추가, 삭제가 자주 일어나는 데이터 집합에서 아주 빠른 검색을 수행한다. 선택할 수 있는 알고리즘이 다양한 경우에는 용도, 목적, 실행 속도, 자료구조 등 여러 사항을 고려해서 선택해야 한다. 복잡도(Complexity) 알고리즘의 성능을 객관적으로 평가하는 기준을 복잡도라고 한다. 시간 복잡도(time complexity): 실행하는 데 필요한 시간을 .. 2021. 6. 22.
Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편 - 02 기본 자료구조와 배열 요약 배열(array) 묶음 단위로 값을 저장하는 자료구조 원소(element): 배열에 저장된 객체 하나하나 인덱스(index): 각 원소는 0, 1, 2... 순으로 index를 부여받는다. 튜플(tuple) 원소에 순서를 매겨 결합한 것으로 원소를 변경할 수 없는 이뮤터블(immutable) 자료형이다. 원소를 쉼표로 구분하여 나열한 뒤 결합 연산자 ()로 둘러싸는 방식으로 생성한다. 원소가 1개인 경우 원소 뒤에 쉼표를 반드시 입력해야 한다. 쉼표가 없을 경우 단순 변수로 여긴다. 리스트(list) 원소를 변경할 수 있는 뮤터블(mutable) 자료형이다. 연산자 [] 안에 원소를 쉼표로 구분하여 표기하여 생성한다. 슬라이스(slice) 리스트 또는 튜플의 원소 일부를 연속해서 또는 일정한 간격으로 꺼.. 2021. 5. 24.