java
[BOJ/JAVA] 2960번: 에라토스테네스의 체
2960번: 에라토스테네스의 체에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다. 이 알고리즘은 다음과 같다. 2부터 N까지 모든 정수를 적는다. 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다. P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다. 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.https://www.acmicpc.net/problem/2960키워드2부터 N까지 모든 정수를 적는다.아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.구현..
이진 검색 트리
1. 이진 검색 트리란?💡자료들을 일정한 순서에 따라 정렬한 상태로 저장해두는 트리사용 예시캐릭터 생성 시 특정 닉네임이 이미 저장되어있는지 확인하기나보다 1등 위인 사람과 1등 아래인 사람을 찾기 대부분 언어 표준 라이브러리에서 제공하기 때문에, 직접 구현하지 않는다.2. 이진 검색 트리의 정의와 조작2-1. 이진트리란?💡한 노드당 최대 2개의 자식 노드만 가질 수 있는 트리따라서 관련 객체 작성 시 다음처럼 구현이 된다.class Node { int data; Node left, right; }2-2. 이진 검색 트리의 특징N개의 원소 중에서 원하는 원소를 찾기까지 걸리는 시간은 다음과 같다.O(logN)O(\log{N})O(logN)시간이 logN이 걸리기 위해선 노드들이 특별한 방식으로 저장될 ..
DB 관련 용어
ORM :: Object Realation Mapping💡JAVA의 객체와 RDB의 테이블을 자동으로 매핑하는 방법장점ORM을 사용하면 데이터베이스 쿼리를 객체지향적으로 조작이 가능하다.객체로 데이터베이스를 접근이 가능하다.재사용, 유지보수가 편리하다.데이터베이스에 대한 종속성이 줄어든다.객체를 기반으로 데이터베이스 테이블을 관리하기 때문에 데이터베이스에 종속적이지 않다.단점ORM만으로 서비스를 구현하기에는 한계가 있다.복잡한 서비스의 경우 코드만으로 구현하기 까다로움JPA :: Java Persistence APIJava에서 ORM 기술 표준으로 채댁된 인터페이스 모음ORM은 개념적인 느낌이라면, JPA는 개념적인 느낌을 인터페이스로 표현한 것이다.이 인터페이스를 이용한 구현체를 확인해보자.대표적인 구..
[BOJ/JAVA] 1822번: 차집합
키워드집합 A에는 속하면서 집합 B에는 속하지 않는 모든 원소를 구하는 프로그램구현집합 연산 중 차집합 연산을 이용하여 구현한다.A.removeAll(B)A집합에는 속하지만, B집합에는 속하지 않게 A를 바꾼다.코드import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; public class java_1822 { static Set aSet, bSet; public static void main(String[] args) throws IOExcepti..
[BOJ/JAVA] 2110번: 공유기 설치
2110번: 공유기 설치도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다.https://www.acmicpc.net/problem/2110키워드집에 공유기 C개를 설치가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치구현huses[] 각 집의 좌표를 오름차순으로 정렬한다.solution()인접한 두 공유기 사이의 거리를 매개변수로 이분탐색을 진행한다.초기 low는 1초기 high는 마지막원소 - 첫번째 원소 (이 때가 차이가 가장 크므로..)[low, high]에 속하면서, mid = (lo..
[BOJ/JAVA] 2343번: 기타 레슨
키워드블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다.M개의 블루레이에 모든 기타 강의 동영상을 녹화하블루레이의 크기(녹화 가능한 길이)를 최소M개의 블루레이는 모두 같은 크기구현블루레이 크기를 매개변수로하여 이분 탐색을 진행한다.lectures[]강의의 누적합low = 가장 긴 길이의 강의high = 모든 강의 길이의 합canMake()mid = (low+high)/2 의 블루레이 크기로 녹화할 수 있는지 체크0부터 누적합을 계산하며 진행한다. mid보다 커지는 순간 → 현재 인덱스의 강의를 제외한 이전 강의를 현재 블루레이에 담는다.마지막 인덱스가 아닌데, 블루레이의 수가 M이상이라면 .. false 반환반복문이 끝난 경우 → 디스크가 남는 경우디스크의 크기는 항상 한 개의 강의를 넣을만큼 충분..
[BOJ/JAVA] 23631번: 진심 좌우 반복뛰기
키워드위치 x = 0에서 시작하여, 처음에는 오른쪽으로 Km를 뛴 다음 방향을 바꾼다.방향을 바꿀 때마다 이전에 움직인 거리에 Km만큼 더한 거리를 뛰고, 다시 방향을 바꾼다.정확히 (N - 1)m만 뛸 것구현다음을 정의하자. 전부 뛴다 → 해당 뛰여야할 길이만큼을 전부 뛴다.n전부 뛴 횟수전부 뛸 수 있는 n값을 구한다.low = 0high = 5000(5000)(5000+1)/2 ≥ 10,000,000 이므로 5000을 상한선으로 정했다.n을 매개변수로 하여, 이분 탐색으로 진행한다.숫자가 매우 크므로, java에서는 BigInteger를 활용한다.n번째에서 전부 뛰었을 때 위치는 다음과 같다.이동 횟수좌표1K2-K32K4-2K53K6-4K위 표에서 알 수 있듯이 이동횟수를 보면, 좌표를 알아낼 수 ..
문자열 합치기
도입JAVA에서 문자열을 합치는 방법에는 여러가지가 있다.각 방법에 대해 시간을 비교해보자.공통 테스트용 문자열다음 문자열을 계속해서 연결할 것이다.final static String test = "test";+연산자 // + 연산자를 이용한 문자열 합치기 public static void plusOperation(int loop) { String result = ""; long startTime = System.currentTimeMillis(); for (int i = 0; i < loop; i++) { result += test; } long endTime = System.currentTimeMillis(); System.out.println("plusOperation::걸린 시간" + (endTi..
Swagger를 활용한 REST API 명세 문서화
💡API가 어떤 로직을 수행하고, 어떤 데이터를 받아 어떤 형식으로 반환하는지 정리해준다.의존성 추가하기pom.xml 에 다음 의존성을 추가한다. io.springfox springfox-boot-starter 3.0.0 의존성 추가 결과는 다음과 같다.Swagger 관련 설정 코드 작성com.springboot.api.config.SwaggerConfiguration.java를 생성한다.package com.springboot.api.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web...
PUT/DELETE API 만들기
PUT API💡POST API와 유사하나, 보통 DB 리소스 값을 업데이트하는데 사용클래스 생성package com.springboot.api.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/put-api") public class PutController { }@RequestBody를 활용한 PUT 메서드 구현POST와 마찬가지로 데이터의 형태가 정해져 있는경우, 그렇지 않은 경우 2가지로 나눈다.데이터의 형태가 정해져 있지 않은 경우..