전체 278

정렬 - 병합 정렬 (Merge Sort)

#1 알고리즘#1-1 #1-2 #1-3 #1-4 #1-5병합 정렬의 총 비교 횟수는, 최악의 경우 nlog2n이다 #2 코드#2-1 자바public static void mergeSort(int[] array, int startIndex, int endIndex) { // (startIndex  #2-2 코틀린fun mergeSort(array: Array, startIndex : Int, endIndex : Int) { // (startIndex , startIndex: Int, midIndex : Int, endIndex: Int) { // array에서 나뉜 'f'irst 부분을 순회할 인덱스 f var f = startIndex // f의 최댓값은 midIndex // ..

정렬 - 버블 정렬 (Bubble Sort)

#1 알고리즘#1-1정렬 방식이 마치 거품이 수중에 있다가 수면 위로 보글보글 올라가는 모습과 비슷해서 버블 정렬이라고 이름 붙여졌다. 기본적인 버블 정렬은, 정렬 작업을 시작할 때 중간에 배열 이미 정렬된 상태여도 maxIndex가 1이 되는 마지막 반복까지 무의미한 순환을 계속한다. 이 문제점을 해결하기 위해 알고리즘에 한 가지 장치를 할 수 있는데, 그걸 향상된 버블 정렬이라고 부른다. #2-1반드시 n * (n - 1) / 2번의 비교를 하는 일반 버블 정렬에 비해, 향상된 버블 정렬은 비교 횟수를 최소 (n - 1)번까지 낮출 수 있다. #2 코드#2-1 자바public static void bubbleSort(int[] array, int startIndex, int endIndex) { ..

[백준] 2750 (수 정렬하기)

#1 알고리즘 버블 정렬 (Bubble Sort)#1 알고리즘 정렬 방식이 마치 거품이 수중에 있다가 수면 위로 뽀글뽀글 올라가는 모습과 비슷해서 버블 정렬이라고 이름 붙여졌다. 기본적인 버블 정렬은, 정렬 작업을 시작할 때 중간에 배열kenel.tistory.com정렬 알고리즘은 여러 가지가 있다. 상황에 맞추어 가장 적절한 알고리즘을 골라야 하지만, 나는 알고리즘을 공부 중이므로 사용해 보지 않은 정렬 알고리즘 중에 아무거나 골라서 사용한다. 이 문제에 사용할 알고리즘은 버블 정렬(Bubble Sort)이다.  #2 코드#2-1 자바import java.util.Scanner;public class Main { public static void main(String[] args) { ..

중복된 원소 값이 있는 경우의 이진 탐색 (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라는 정수가 아닌 수가 적혀 있었다. 사회자는 병뚜껑에 쓰인 숫자를 보고 당황했지만, 장난기가 발동해 그냥 게임을 진행해 보기로 했다. 참여자들은 병뚜껑에 쓰인 숫자가 정수가 아닐 거라고는 생각지 못하고 업 앤 다운 게임에 임할 것이다. 이 업 앤 다운 게임은 실패할 운명이다. 하지만, 이 사례를 상상해 보면서 이진 탐색..

[백준] 1654 (랜선 자르기)

#1 알고리즘#1-1 #1-2 중복된 원소 값이 있는 경우의 이진 탐색 (Binary Search)#1 알고리즘 이진 탐색 (Binary search) #1 알고리즘 이렇게 해서 x의 인덱스 i를 찾으면 좋겠지만, 이 x가 배열 values 어디에도 존재하지 않는 경우도 있을 것이다. 이 경우엔 어떻게 처리해야 할까? 업kenel.tistory.com해당 글을 읽어야 이 다음 부분을 이해할 수 있다 #1-3 #1-4여기에서 정리했던 binarySearchLastIndex()와 다른 부분을 강조 표시했다. min과 max을 각각 2로 나눈 뒤 더하는 이유는 int형의 오버플로우 방지를 위해서다. 또, values는 내림차순이기 때문에, Up 및 Down을 판단하는 코드에서의 부등호를 반대 방향으로 돌렸다...

[백준] 1436 (영화감독 숌)

#1 알고리즘1번 if문과 2번 if문을 병렬로 두는 코드보다, 2번 if문을 1번 if문 안에 넣는 코드가 더 빠르다. 왜냐하면, contains666Count가 갱신되지 않았다면, targetCount와 비교한 결과 또한 갱신되지 않을 것이기 때문이다. contains666Count가 변해야, 2번 if문에 의미가 생긴다. #2 코드#2-1 자바import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int targetCount = sc.nextInt(); sc.close(); ..