![[java] 소수 구하기(에라토스테네스의 체)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FecUIuM%2FbtsNcqY65x8%2FAAAAAAAAAAAAAAAAAAAAACCkQvjM6C2Suz4IialLw7QCXsaqTW0vpLxoK5DcXpxy%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D4GX84Dx48NiixCxxiTznFhGCYUg%253D)
에라토스테네스의 체는 고대 그리스 수학자 에라토스테네스가 고안한 소수(Prime Number)를 빠르게 구하는 알고리즘이다.특정 수 N 이하의 모든 소수를 구할 때 매우 효율적이다.이 알고리즘의 시간 복잡도는 O(Nlog(logN))이다.핵심 아이디어- 2부터 시작해서, 아직 지워지지 않은 가장 작은 수를 소수로 기록한다.- 그 수의 배수들은 모두 지운다.- 이를 N까지 반복한다. 1. 크기가 N + 1인 배열을 선언한 후 인덱스 0과 1은 false 처리한다.N이 16이라고 가정하면 배열은 아래와 같다. 2. 인덱스 2부터 시작해서 N의 제곱근(=4)까지 해당 인덱스의 배수를 순차적으로 탐색한다. 값이 true라면 false로 바꿔준다.N의 제곱근까지만 탐색하는 이유어떤 수 N이 두 수 a와 b의 곱이..
![[DB 모델링] 쉬운 데이터베이스 모델링](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcvoAv0%2FbtsNdBFikbf%2FAAAAAAAAAAAAAAAAAAAAAPj60FDYQRU0c3XxgSocxXT9BkLQBvfoAW8gMuefzwGE%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DdgLKnwOLMPEY%252BTVOG6szzv%252BxgZY%253D)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.가장 중요한 핵심 원칙DB 설계의 핵심은 '중복 없애기'이다.users 테이블id이름1박재성2김유찬 posts 테이블id제목내용작성자1[속보] 개발자 채용 확대내용1박재성2취업 꿀팁 공유합니다!내용2박재성............132어제 면접 보고 온 썰내용132박재성위의 표와 같이 게시글 데이터가 DB에 많이 쌓여있다고 가정하자. 어느 날 박재성이라는 사람이 박지성으로 개명을 했다.그래서 게시글에 작성된 작성자의 이름도 전부 박재성에서 박지성으로 고쳐주어야 한다. 그럼 위 게시글의 모든 데이터를 뒤져서 박재성이라는 이름을 전부 찾아서 박지성으로 고쳐야 한다. 이런 문제가 발생한 가장 근본적인 이유는 데이터 중복 때..
![[java] 백준 1541번 문제(잃어버린 괄호)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F5hm6N%2FbtsNcMmlyrw%2FAAAAAAAAAAAAAAAAAAAAAElmgzZ1P_oWC-VmdGNmOyVFx18ud4yFsW44pbrcMj3G%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DJJHnpwkbLgZTQY7J091QZlVNGDA%253D)
원본 링크 : https://www.acmicpc.net/problem/1541문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Boj_1541{ /* 10+20-30+40-50+60 = 10+20-(30+40)-(50+60) = 10+20-(30+40+50+60) */ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..
![[java] 백준 1931번 문제(회의실 배정)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxBHjd%2FbtsNcvd2nxW%2FAAAAAAAAAAAAAAAAAAAAAO3YahmHfdG_N0I4XdWyI0MnRtiFjp33PdrKmLPWei4S%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DgGJTwaiAlsRJmI0nXuHx3VTwYmI%253D)
원본 링크 : https://www.acmicpc.net/problem/1931문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.StringTokenizer;public class Boj_1931{ // 회의 클래스 static class Meeting { int startTime; // 회의 시작시간 int endTime; // 회의 종료시간 public Meeting(int startTime, int endTime) { ..
![[java] 백준 1715번 문제(카드 정렬하기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb3y7VC%2FbtsNamPOeFf%2FAAAAAAAAAAAAAAAAAAAAACPowy2sLAbpc0c8TvtfGyBaiAOA7oL9aMP0Wp6FDYbP%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D813htobJLzoiV98U9JUxVedJ9%252FQ%253D)
원본 링크 : https://www.acmicpc.net/problem/1715문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.PriorityQueue;public class Boj_1715{ public static void main(String[] args) throws IOException { PriorityQueue pq = new PriorityQueue(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ..
![[java] 백준 1744번 문제(수 묶기)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F49FC1%2FbtsNaEpa5bg%2FAAAAAAAAAAAAAAAAAAAAAG7dZxE9CJn93zdQS-ZEpZCifkuP5QO4htVE-jcC_b86%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dg4gkmusBwfLRhFcGMkduV3YbR6c%253D)
원본 링크 : https://www.acmicpc.net/problem/1744문제설명 소스코드방법 1import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Boj_1744{ public static void main(String[] args) throws IOException { List positives = new ArrayList(); // 2 이상 ..
![[JPA] @Builder.Default](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FCobk0%2FbtsM6iG3kXO%2FAAAAAAAAAAAAAAAAAAAAABuMH4Jf35af-wMpuMvMxJ680L9Y-4kBlUnC8oZV2qYd%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Ddz3Z8O6rN7rJnAuugZfysLnAGUA%253D)
@Builder.Default는 Lombok의 @Builder와 함께 사용할 때, 기본값이 무시되지 않도록 유지시켜주는 어노테이션이다.일반적으로 @Builder를 사용하면, 필드에 직접 초기화한 값이 무시된다.@Builderpublic class Product { private String name; private int price = 1000;}위와 같이 price = 1000을 설정했더라도, Product.builder().build()를 실행하면 price는 0이 된다.즉, 기본값 1000이 무시되는 것. 해결 방법@Builderpublic class Product { private String name; @Builder.Default private int price = ..
![[JPA] 엔티티 클래스에서 @Builder 위치](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FDW2Rs%2FbtsM7gHZ67o%2FAAAAAAAAAAAAAAAAAAAAAFy61XLRW04ih3I4Qk-PcpJ7zvR9nHTwBjulZnYaW2lP%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DqzI1XajENCeNTU%252BPKZTasgpctR8%253D)
@Builder를 생성자 위에 두는 방식@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Entitypublic class Product extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productNumber; private String name; private int price; @Builder // 생성자 위에 빌더 public Product(String productNumber, String name, int price) { this.produc..