Algorithm(4)
-
[Python] zip() 함수에 대하여
오늘도 프로그래머스 연습문제를 풀었는데 해쉬(Hash) 관련 문제에서 자꾸 오류가 난다. 몇번 시도를 해보다가 안되서 답을 봤는데 zip() 이라는 함수가 있다. 처음보는 함수라 찾아본 결과 아주 유용하게 활용할 수 있을 것 같아 포스팅으로 남겨본다. 먼저 zip()은 내장함수로, 동일한 개수를 가진 자료형을 묶어주는 역할을 한단다. 설명이 애매한데 동일한 개수를 가진 자료형이면 list도 되고 tuple도 되고 dict도 된다는 말 아닌가? 아무튼간 zip은 두 개나 그 이상의 시퀀스를 받아들여서 튜플들의 리스트로 만드는 것을 의미한다. 예를 들어서 'abc'라는 문자열과 [0,1,2]로 이루어진 리스트가 있다고 할 때, 이 둘을 zip하면 다음과 같은 결과가 나온다. >>> s = 'abc' >>> ..
2020.09.28 -
합병정렬(Merge Sort) 구현하기
합병정렬 알고리즘 요약 합병 정렬은 일반적인 방법으로 구현했을 때 안정 정렬에 속하며, 분할 정복 알고리즘 중 하나이다. 분할 정복(divide and conquer) 방법 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다. 분할 정복 방법은 대개 순환 호출을 이용하여 구현한다. 과정 설명 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않을 경우에는 정렬되지 않는 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 합병 정렬의 과정 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한..
2020.08.12 -
선택정렬(Selection Sort) 구현하기
선택정렬은 첫 번째 자료를 두 번째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 찾아 첫 번째에 놓고, 두 번째 자료를 세 번째 자료부터 마지막 자료까지와 차례대로 비교하여 그 중 가장 작은 값을 찾아 두 번째 위치에 놓는 과정을 반복하여 정렬을 수행하는 정렬 알고리즘이다. 소스코드 public static void main(String[] args) { int[] arr = {3, 6, 2, 8, 1, 15, 11, 5}; selectionSort(arr); System.out.println(Arrays.toString(arr)); } private static void selectionSort(int[] arr) { for (int i=0; i
2020.08.12 -
삽입정렬(Insertion Sort) 구현하기
삽입정렬은 1부터(0아님) n까지 순서대로 index를 설정하여 현재위치보다 앞쪽을 순회하여, 기준 index값보다 큰 값들을 한칸씩 뒤쪽으로 밀고 기준 index보다 작은 값을 만나면 해당 위치에 삽입(insertion)하는 정렬알고리즘이다. 구현하기 까다롭지 않은 알고리즘이지만… It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. 퀵 정렬, 힙 정렬, 마지 정렬과 같은 고급알고리즘에서 훨씬 효율적이지 못하다는 단점을 가지고 있다. More efficient in practice than most other simple quadratic (i.e., ..
2020.08.12