깨알 개념/알고리즘 14

중복된 원소 값이 있는 경우의 이진 탐색 (Binary Search)

#1 알고리즘#1-1 이진 탐색 (Binary search)#1 알고리즘 이렇게 해서 x의 인덱스 i를 찾으면 좋겠지만, 이 x가 배열 values 어디에도 존재하지 않는 경우도 있을 것이다. 이 경우엔 어떻게 처리해야 할까? 업 앤 다운 게임은 우리나라에선 소주kenel.tistory.com해당 글에서 이어진다. #1-2 #1-3중복된 값이 없는 경우의 이진 탐색에선 min 있는 경우의 이진 탐색에선 min = max가 되는 시점이 while의 탈출 시점이다. min = max는 검색 범위가 i에 최대로 접근 즉, 아예 같은 값이 되었다는 의미다. #1-4binarySearch() 대비 binarySearchFirstIndex() 또는 binarySearchLastIndex()에서 다른 부분을 빨갛게 ..

이진 탐색 (Binary search)

#1 알고리즘 #1-1 #1-2 이렇게 해서 x의 인덱스 i를 찾으면 좋겠지만, 이 x가 배열 values 어디에도 존재하지 않는 경우도 있을 것이다. 이 경우엔 어떻게 처리해야 할까? #1-3 업 앤 다운 게임은 우리나라에선 소주병 뚜껑에 적혀 있는 0 ~ 50 사이의 정수를 가지고 맞추는 술 게임의 이미지가 강하다. 어떤 상황을 가정해보겠다. 어느 병뚜껑엔 알 수 없는 이유로 34.5라는 정수가 아닌 수가 적혀 있었다. 사회자는 병뚜껑에 쓰인 숫자를 보고 당황했지만, 장난기가 발동해 그냥 게임을 진행해 보기로 했다. 참여자들은 병뚜껑에 쓰인 숫자가 정수가 아닐 거라고는 생각지 못하고 업 앤 다운 게임에 임할 것이다. 이 업 앤 다운 게임은 실패할 운명이다. 하지만, 이 사례를 상상해 보면서 이진 탐색..

정렬 - 선택 정렬 (Selection Sort)

#1 알고리즘#1-1 #1-2 #2 코드#2-1 자바public static void selectionSort(int[] array, int startIndex, int endIndex) { for(int maxIndex = endIndex; startIndex  #2-2 코틀린fun selectionSort(array: Array, startIndex : Int, endIndex : Int) { for(maxIndex : Int in endIndex downTo (startIndex + 1)) { // 배열을 순회하며 가장 값이 큰 원소의 index를 구한다 var indexOfLargest = startIndex; for(i : Int in (s..

배열의 길이(length)와 원소의 순번(index)

#1 알고리즘 #1-1 #1-2 자바에서, 배열을 선언할 때는 '갯수'를 이용한다. 다음 자바 코드를 보자. 자바는 0-based indexing을 사용한다. int[] array = new int[5]; // 5는 0-based index의 최댓값 혹은 1-based index의 최댓값도 아닌 그저 '갯수'다 array[2] = 789; // 2는 '순번'이다. 배열을 선언할 때 [ ] 자리에 들어가는 숫자는 '갯수'를 의미한다. 배열에 접근할 때 쓰는 [ ] 속에 들어가는 숫자가 '순번'인 것과 달리 말이다. 이를 구분하지 못하면, "0-based indexing을 쓰는 언어일지라도 선언할 때만큼은 1-based indexing을 쓰나?" 와 같은 오해가 생긴다. #1-3 '순번' 과 '갯수'는 서로..