깨알 개념 85

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

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

이진 탐색 (Binary search)

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

배열의 길이(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 '순번' 과 '갯수'는 서로..

[Java] Map<Key, Value>의 Key 자리에 원시 타입(Primitive types) 데이터 형식이 올 수 없는 이유

#1 알고리즘 #1-1 자바의 Map 인터페이스에서, Map의 Key는 제네릭으로 작성되어 있다. 따라서, "제네릭(Generic) 자리에 원시 타입(Primitive types) 데이터 형식이 올 수 없는 이유"를 생각해야 한다. #1-2 먼저, 제네릭 탄생의 배경을 알아야 한다. 제네릭은, 자바에서 제네릭 도입 이전에 발생한 여러가지 문제(타입 안전성이 없고, 프로그래머가 일일이 명시적으로 형변환을 해야 하며, 코드 재사용성이 낮음)를 해결하기 위해 도입되었다. 제네릭은 많은 종류의 객체들을 다뤄야 하는 프로그래머가 객체를 더 쉽고 직관적으로 다룰 수 있도록 도와준다. #1-3 제네릭을 한 마디로 표현하면 객체 구별의 직관화이다. 따라서, 객체와 연관이 없는, 독립적인 개념인 원시 타입 변수의 데이터..