자바 35

[백준 - 20159] 동작 그만. 밑장 빼기냐? - Java

문제 설명 20159번: 동작 그만. 밑장 빼기냐? 카드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 단, N은 짝수이다. 둘째 줄에 카드의 윗장부터 밑장까지 카드의 값 X (1 ≤ X ≤ 10,000)이 정수로 주어진다. www.acmicpc.net 접근 방법 우선 문제에서 주어진 예시를 기준으로, 정훈이가 얻을 수 있는 카드 값의 합의 경우의 수는 다음과 같습니다. 이때, 각 경우의 수를 '밑장을 빼서 자신한테 분배한 경우'와 '밑장을 빼서 상대한테 분배한 경우'로 나누어 생각해볼 수 있겠습니다. 우선 밑장을 빼서 자신한테 분배한 경우를 살펴보겠습니다. 이 경우 당연히 정훈이의 카드 패에는 밑장(카드 패 맨 마지막 순서)이 항상 포함됩니다. 그리고 1번째 및 3번째 카드와 2번째 4번째 카..

Algorithm/BOJ 2022.09.13

Java의 예외(Exception)에 대해 알아보자!

프로그램에서 발생할 수 있는 3가지 에러 예외 처리를 다루기 앞서 우선 프로그램에서 발생할 수 있는 3가지의 에러에 대해 알아보자. 첫 번째는 컴파일 에러이다. 이는 컴파일러가 소스코드를 컴파일할 경우 오타, 자료형 체크 등의 기본적인 검사를 수행함으로써 프로그램이 실행되기 전에 에러가 발생한다. 두 번째는 런타임 에러이다. 이는 프로그램이 실행 중에 발생하는 에러로 이로 인해 잘못된 결과를 얻거나 프로그램이 비정상적으로 종료될 수 있다. 마지막으로 논리적 에러이다. 이는 컴파일 에러나 런타임 에러는 없지만, 개발자가 원래 의도한 것과 다르게 동작하는 것을 말한다. 예외(Exception)란? 앞서 프로그램에서 발생할 수 있는 3가지 에러에 대해 간단히 살펴보았는데, 자바에서는 런타임 에러를 '에러(Er..

Technology/Java 2022.09.12

[정렬 연습] 병합 정렬의 원리 및 구현 - Java

병합 정렬이란? 병합 정렬은 퀵 정렬과 마찬가지로 분할 정복 알고리즘으로서 주어진 데이터를 두 개의 균등한 크기로 분할하고 분할된 영역을 정렬한 후 병합해 나가는 방식으로 정렬한다. 이때 분할하고 병합하는 과정에서 기존 데이터 전체 크기와 동일한 추가적인 자료구조를 사용하므로 O(n)의 공간 복잡도를 가진다. 그림으로 병합 정렬 이해하기 아래와 같이 최초 정렬되지 않은 크기 10의 정수형 배열이 있다고 가정했을 때, 병합 정렬을 통해 오름차순으로 정렬해보자. 우선, 주어진 배열의 영역을 절반씩 분할해나가는데, 영역의 크기가 2개 이하가 될 때까지 분할해나간다. 이때 분할해나가는 과정은 마치 깊이 우선 탐색과도 같다. 분할을 해나가는 중 영역의 크기가 2개 이하가 됐을 경우 즉, 더 이상 분할할 게 없는 ..

Algorithm/Basic 2022.09.11

[정렬 연습] 퀵 정렬의 원리 및 구현 - Java

퀵 정렬이란? 퀵 정렬은 주어진 데이터 상 특정 값(피벗)을 기준으로 작은 값들은 왼쪽에, 큰 값들은 오른쪽에 옮겨 2개의 파티션(Partition)으로 분할(Divide)해 나가는 방식으로 정렬한다. 퀵 정렬에 사용되는 기법을 분할 정복 알고리즘(Divide and conquer algorithm)이라고 하는데, 이는 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법이다. 분할 정복 알고리즘은 일반적으로 재귀 함수(Recursive function)를 통해 자연스럽게 구현된다. 퀵 정렬은 주어진 데이터 상 최초 피벗을 몇 번째 데이터로 정하는지에 따라 그리고 데이터 상태에 따라 다른 성능을 보일 수 있는데, 대표적으로 배열의 첫 번째 데이터를 피벗으로 정하는 호어 분할 방식이 있..

Algorithm/Basic 2022.09.10

Java의 인터페이스에 대한 고찰

실생활에서의 인터페이스 인터페이스란 무엇일까? 인터페이스는 객체(사람, 사물 등)간 상호작용하기 위한 행동(action)이라고 할 수 있다. 예를 들어, 어떤 고객이 식당에서 특정 메뉴를 주문한다고 가정했을 때, 고객이 식당에 특정 메뉴를 주문하기 위해서는 일종의 '수단'이 필요하다. 이때 이러한 수단에는 카운터 직원이나 키오스크 등이 존재할 수 있다. 즉, 가게에서는 고객의 주문을 위한 수단으로서 카운터 직원, 키오스크 등의 수단을 제공하는데, 이러한 수단들은 공통적으로 '주문 받기', '결제하기' 등의 행동으로 고객들과 상호작용한다. 고객 입장에서는 자신을 응대하는 수단이 무엇인지와 또한 내부 처리 과정이 어떤지에 대해서는 큰 관심이 없다. 단지 메뉴를 주문하기 위해 해당 수단이 제공하는 '주문 받기..

Technology/Java 2022.09.08