BinarySearch : 이진탐색 (이분탐색) 이진탐색은 데이터가 정렬되어 있는 상태에서 원하는 값을 찾아내는 알고리즘이다. 데이터의 중앙값과 찾고자 하는 값을 비교해 데이터의 크기를 절반씩 줄이면서 대상을 찾는 방식이다. 크기가 100인 배열이 있고, 우리가 찾고자 하는 값이 99번째 인덱스에 들어있는 상황을 가정해 보자. 일반적인 반복문을 사용하여 1부터 100까지 반복하면 99번째 반복에서 찾고자 하는 값을 찾을 수 있다. 물론 이 경우 찾고자 하는 데이터가 앞쪽에 있다면 같은 데이터셋에 대하여 탐색 시간이 이분탐색을 이용했을 때보다 빠를 것이다. 그런데 만약 데이터의 크기가 1억 개이고, 운이 나쁘게도 우리가 찾고자 하는 값이 99,999,999 번째의 데이터인 경우에는 시간이 매우 오래 걸릴 ..
문제 풀러 가기 -> https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 입력 첫번째 줄을 보자. N은 나무 개수이다. N = 4 M은 필요한 나무의 길이이다. M = 7 두 번째 줄은 각 나무의 길이이다. 풀이 절단기를 몇 m로 설정하고 나무를 베었을 때, 필요한 나무의 길이를 충족하면서 절단기의 높이를 최대가 될 것인가? 절단기의 높이를 설정하면, 그 높이보다 작은 나무는 잘리지 않을 것이고, 절단기 높이..
배열과 문자열의 길이 배열의 길이를 구할 때는 사용하고, 문자열의 길이를 구할 때는 str.length()를 사용한다. 사실 코딩테스트 연습문제를 풀 때마다 맨날 헷갈렸다. 배열은 length뒤에 ()를 안 붙여도 되고, 문자열은 붙여야 한다. 항상 "왜 그럴까?"만 생각하고 넘어갔었다. 추측하기로는 str.length()는 뭔가 메서드의 성격을 갖고 있어서 ()가 붙고, arr.length는 그렇지 않은 것 같다는 정도만 생각하고 있었다. 이번에 그 이유를 한번 찾아보았다. int[] arr = {1,2,3,4}; String str = "hello"; int arr_len = arr.length; //4 int str_len = str.length(); // 5 배열의 length는 함수(메서드)가 ..
제곱근 제곱근을 구하려면 자바에서 손쉽게 Math.sqrt() 메서드를 이용해서 구할 수 있다. 이 메서드를 이용하지 않고 제곱근을 구하는 방법을 알아보자. 바빌로니아 법(The Babylonian Method) 유도 과정 쓸땐 몰랐는데 사진을 업로드하고 보니 글씨가 개판이다... N은 7일때, N의 제곱근을 구해보자. N의 제곱근은 아마 2와 3 사이에 있을 것이다. (3에 가까울 것 같다.) 따라서 N의 제곱근을 임의의 수 Xn과 아주 작은 수 ε 의 합으로 나타낸다. 위의 식을 ε에 대해 정리 한 뒤, 다시 3번의 식에 대입한다. 4번의 식을 정리하면 위의 위키백과 캡쳐본의 공식이 나온다. 맨 처음에 Xn=2라고 놓고 시작해서 3번만 반복했는데도 실제 값과 매우 유사하게 나왔다. 임의의 값 Xn이 ..
Math 클래스? 자바는 수학적 계산을 쉽게 해주는 Math 클래스를 제공한다. Math 클래스의 여러 가지 메서드를 이용해서 수학적 연산, 비교 등을 쉽게 할 수 있다. 간단한 예제로 두 수의 크기를 비교할 때 if문을 사용하는 방법과 Math 클래스를 사용하는 방법을 알아보자. int a = 10; int b = 5; int max = 0; //if문 if(a>b){ max = a; }else{ max = b; } //삼항 연산자 max = a>b ? a:b; //Math 함수 max = Math.max(a,b); 위와 같이 if문, 삼항 연산자, Math.max()함수를 이용해서 최댓값을 구할 수 있다. 메모리 관점과 시간 관점으로 봤을 때 Math 클래스는 해당 연산을 최적으로 수행할 수 있도록 ..
JAVA를 처음 배우면 System.out.println("Hello World!"); 부터 배운다. 그리고 얼마 안있어서 System.out.printf("%d",3); 와 같은 포맷을 지정할 수 있는 printf도 배운다. format() 메서드는 printf와 비슷하게 포맷을 지정하여 String에 저장할 수 있는 메서드이다. 1. String.format() 메서드 format(String format, Object... args) format(Locale locale, String format, Object... args) format : 문자열 포맷 지정 locale : 선택, 로케일 지정 args : 선택, format에저 지정된 포맷에 넣어줄 데이터 입력 (ex) int age = 23 S..
BoardService Github https://github.com/HSRyuuu/my_first_board 1. 개요 프로젝트 명 : Board Service 개발 인원 : 1명 개발기간 : 2023.04.11 ~ 2023.05.15 주요 기능 : 기본적인 게시판의 기능 (아래에서 추가로 설명) 사용 기술 : Java, SpringBoot, gradle, thymeleaf, MyBatis (아래에서 추가로 설명) 데이터베이스 : H2 Database 2. skills🔨 Java 11 SpringBoot 2.7.10 gradle Thymeleaf MyBatis H2 Database HTML5, CSS3, BootStrap 기타 사용 기술 필터(Spring Interceptor) 세션 쿠키를 이용하여 로..
함수형 프로그래밍 함수의 구현과 호출만으로 프로그래밍이 수행되는 방식 순수함수(pure function)를 구현하고 호출함으로써, 외부 자료에 side effect를 주지 않도록 구현 순수함수 : 매개변수만을 사용하여 만드는 함수 → 따라서 함수 외부에 있는 변수를 사용하지 않아 외부에 영향을 주지 않음 함수를 처리할 때 외부 자료를 사용하지 않아서 외부에 영향을 미치지 않기 때문에 여러 자료가 동시에 수행되는 병렬처리가 가능하다. 1. 람다식 익명 함수 매개변수와 매개변수를 이용한 실행문을 이루어진다. (매개변수) -> { 실행문 }; 람다식의 장점 코드가 간결해짐 코드 가독성이 높아짐 생산성이 높아짐 람다식의 단점 코드 재사용 불가 디버깅이 어려움 람다식 표현 규칙 메서드 이용 int add(int ..