삽입 정렬 삽입 정렬은 전체에서 하나씩 올바른 위치에 "삽입" 하는 방식입니다! 선택 정렬은 현재 데이터의 상태와 상관없이 항상 비교하고 위치를 바꾸지만, 삽입 정렬은 필요할 때만 위치를 변경하므로 더 효율적인 방식입니다! 이미 키 순으로 정렬된 사람들이 일렬로 쭉~ 서 있는데, 다음 원소가 그 정렬된 사람들 사이를 비집고 들어가면서 아 여기가 내 자리구나! 하면서 삽입하며 정렬하는 방식입니다. 아래 [5, 3, 8, 1, 2] 배열을 삽입 정렬하는 그림을 보시면 이해해보겠습니다. 삽입 정렬의 진행순서를 코드로 좀 더 자세히 알아보겠습니다 [4, 6, 2, 9, 1] # 정렬되지 않은 배열 1단계 : [4, 6, 2, 9, 1] 4는 현재 정렬되어 있는 부대원입니다. 그럼 이제 새로운 신병인 6을 받습니..
cs
선택 정렬 선택정렬은 말 그대로 선택해서 정렬한다는 것입니다. 예를 들면, 초등학교 키번호르를 생각해보시면 됩니다. 학생들을 줄을 세우고 한번 쭉 둘러보며 키가 가장 작은 학생을 찾습니다. 가장 키가 작은 학생을 찾아 맨 앞으로 세우고 다시 줄을 쭉 둘러봅니다. 두 번째로 키가 작은 학생을 찾아 두 번째에 세우고 줄을 다시 둘러보며 세번째로 작은 학생을 찾습니다. 이러한 반복으로 정렬하는 방식이 선택정렬입니다. 선택 정렬의 진행순서를 좀 더 자세히 살펴보겠습니다. [4, 6, 2, 9, 1] # 정렬되지 않은 배열 1단계 : [4, 6, 2, 9, 1] 4와 6과 2와 9와 1을 차례차례 비교합니다. 그 중 가장 작은 1과 맨 앞 자리인 4를 교체합니다! [1, 6, 2, 9, 4] 이렇게요! 자, 그러..
버블정렬 가장 쉽고 직관적인 정렬기법입니다. 버블정렬은 첫 번째와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를,... 이런 식으로 [마지막 -1]번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬하는 방식입니다. 작은 숫자, 큰 숫자 순서로 있으면 내버려두고 큰 숫자, 작은 숫자 순서로 있으면 둘의 위치를 변경하는 것입니다. 예시를 보겠습니다. 버블정렬이 어떤 순서로 진행되는지 좀 더 자세히 살펴보겠습니다. [4, 6, 2, 9, 1] # 정렬되지 않은 배열 1단계 : [4, 6, 2, 9, 1] 4와 6을 비교합니다! 4 2 이므로 둘을 변경합니다! [4, 2, 6, 9..
#4 배열요소로 큰 수 만들기 Q. nums 배열에서 (nums[i]-1*nums[j]-1)식으로 만들 수 있는 가장 큰 수를 만들어주세요! 정답 코드 import heapq import sys class Solution: def maxProduct(self, nums): a,b = heapq.nlargest(2, nums)[0] -1 , heapq.nlargest(2, nums)[1] -1 return a*b nums = sys.input().readline sol = Solution() result = sol.maxProduct(nums) print(result) 풀이 과정! 이전 포스팅에서 배웠던 heapq.nlargest()함수를 통해 문제를 해결해봤습니다. 처음보시는 분이나, 다시 정보를 찾아..
#3 K번째 큰 요소 Q. 숫자로 구성된 배열 nums와 integer k가 주어집니다. nums 배열에서 k번째로 큰 요소를 찾아주세요 (sort을 사용하지 않고 구현해주세요) 정답 코드 import heapq class Solution: def findKthLargest(self, nums, k) : return heapq.nlargest(k, nums)[-1] nums = [1, 1, 1, 2, 2, 3] k = 2 sol = Solution() result = sol.findKthLargest(nums, k) print(result) # 2 nums배열에서 2번째(k)로 큰 요소 반환! import heapq 풀이 과정! 파이썬은 heapq 모듈을 통해서 힙구조의 데이터 편집에 용이합니다. 다양..
힙이란? 힙(Heap)은 데이터에서 최대값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리 (Complete Binary Tree) 입니다. 이진 트리(Binary Tree)는 트리 중에서도 각 노드가 최대 2개의 자식노드를 가질 때 이진트리(Binary Tree)라고 합니다. 항상 최대/최소의 값들이 필요한 연산이 있다면 힙을 사용하면 되겠습니다. Python3의 경우에는 heapq 라던가 힙 구조화 시켜주는 heapify 함수가 있지만 JavaScript는 그런 함수가 없습니다.. 따로 구현을 해서 사용을 해야한답니다 힙은 항상 큰 값이 상위레벨이 있으며 작은 값이 하위 레벨에 있도록 하는 자료구조입니다. 다시 말하면 부모 노드의 값이 자식 노드의 값보다 항상 커야 합니다. 가장 큰 값은 모든..