이진탐색(Binary Search)를 하기 위해서는 배열이 정렬되어 있어야한다. 이진탐색은 배열을 계속해서 반으로 쪼개나아가면서 탐색하는 알고리즘이다. 위와 같은 배열이 있을 때 '43'원소의 index를 찾고자 하는 경우 배열의 양 끝의 index를 left와 right로 두고 반복문을 시작한다. 이 경우 mid의 index는 (left + right) / 2 가 된다. mid에 해당하는 원소가 '43'이 아니므로 left를 (mid + 1)로 할당함으로써 기존 mid index를 포함한 왼쪽은 탐색하지 않는다. 그럼 위와 같이 left와 mid가 새롭게 할당된다. 새로운 mid에 해당하는 원소도 43이 아니므로 mid를 포함한 오른쪽은 탐색에서 제외하고 right를 (mid - 1)로 다시 할당해 준..
java
기본형 데이터의 경우 간단하게 Arrays.sort() 와 같은 메서드로 정렬이 가능하다. 하지만 특정 객체의 경우 기본형 타입과는 다르게 정렬 기준을 정의해야 하는 경우가 있다. 이때 Java의 Comparable을 이용할 수 있다. Java의 Comparable은 interface이기 때문에 이를 상속받는 class에서는 Comparable interface에 있는 compareTo를 구현해야한다. 위 사진에서 보이듯 compareTo는 비교 결과에 따라 int를 반환한다. 들어온 객체가 자신보다 크면: 음수 리턴 들어온 객체와 자신이 같으면: 0 리턴 들어온 객체보다 자신이 크면: 양수 리턴 이를 이용하여 x, y 좌표를 입력 받고 x 기준으로 오름차순으로 정렬하고 x가 같다면 y 기준으로 오름차순..
선택정렬 해당 위치에 들어갈 원소를 결정한다. 위와 같은 배열을 오름차순으로 정렬하고자 할 때 i의 index를 0에 고정하고 j의 index를 1부터 끝까지 순회하면서 가장 작은 값을 index 0에 배치한다. 그 다음 i의 index를 1에 고정하고 j의 index를 2부터 끝까지 순회하면서 가장 작은 값을 index 1에 배치한다. 위 과정을 반복하게 되면 배열은 결국 오름차순으로 정렬이 된다. public class Main { public int[] solution(int[] input) { for (int i = 0; i < input.length - 1; i++) { int minIdx = i; for (int j = i + 1; j < input.length; j++) { if (input..
문제 링크: https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제) 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레..
Java는 Oracle이든 Azul이든 어디서 다운받든 상관없지만 Java 설치하기 위해 여러 블로그를 찾아본 결과 Oracle 보다는 Azul이 더 좋다는 얘기를 주워들은 적이 있어서 Azul의 Java를 다운받았다. Java 다운로드하는 방법 Azul에서 제공하는 OpenJDK가 Zulu인데, 이는 2가지 방법으로 다운로드할 수 있다. Homebrew를 이용한 다운 공식 홈페이지에서 다운 공식 홈페이지를 통해서 Java를 다운받아보겠다. 1. 공식 홈페이지를 통해서 다운받기 공식 홈페이지에 들어가 보면 Java 버전부터 시작해서 OS, Architecture 별로 여러 가지를 다운받을 수 있다. Java 버전은 가장 최근도, 엄청 오래된 버전도 아닌, 중간 버전인 17 LTS 버전을 다운받았다. in..