전체 글

개발에 관련된 학습 내용들을 기록하는 공간입니다.
Algorithm

최대 공약수, 최소 공배수 구하기 Java (유클리드 호제법)

최대 공약수 최대 공약수는 두 개 이상의 정수의 공통되는 약수중에서 가장 큰 수이다. 예를 들어, 24와 18의 최대 공약수는 6이다. 최대 공약수는 유클리드 호제법을 사용하면 쉽게 구할 수 있다. 유클리드 호제법 유클리드 호제법(- 互除法, Euclidean Algorithm)은 2개의 자연수 또는 정식(整式)의 최대공약수(Greatest Common Divisor)를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다. - 위키백과, 우리 모두의 백과사전. 두 수 중 큰 수를 작은 수로 나누어 나머지를 구한다. (106 % 16 = 10) 작은 수를 방금 구한 나머지로 나눈다. (16 % 10 = 6) 나머지가 0이 될..

Algorithm

에라토스테네스의 체 - 1부터 M까지의 범위 중, 소수 구하기

고대 그리스 수학자 에라토스테네스가 발견한 '에라토스테네스의 체'는 2부터 N까지의 범위에서 소수를 구하는 알고리즘이다. 소수를 판별하는 문제에서 매우 유용하게 사용할 수 있다. 1부터 120까지의 숫자중에서 소수인 숫자를 구하려면 어떻게 해야할까? 1부터 120까지 1씩 숫자를 늘려가며 소수인지 판별할 수도 있겠지만 '에라토스테네스의 체' 알고리즘을 사용하면 보다 빠르게 답을 구할 수 있다. 참고로 '에라토스테네스의 체'의 시간 복잡도는 O(n log(logn)) 이다. '에라토스테네스의 체'의 핵심은 배열에서 소수의 배수를 모두 제거하고 남은 숫자는 모두 소수라는 성질을 이용한 것이다. 아래의 gif를 보자. 우선 2부터 N까지의 숫자를 저장하는 배열을 선언한다. 2부터 시작하는 이유는 1은 소수가 ..

Algorithm

[프로그래머스] LEVEL1. 소수만들기 - Java

Level1. 소수 만들기 ㆍ문제 설명 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요. ㆍ 제한사항 nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다. nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다. ㆍ 입출력 예 nums result [1,2,3,4] 1 [1,2,7,6,4] 4 ㆍ입출력 예 설명 입출력 예 #1 [1,2,4]를 이용해서 7을 만들 수 있습니다. 입출력 예 #2 [1,2,4]를 이용해서 7을 만..

Language/Java

[Java] Math 주요 메서드 정리

프로그래밍을 하다보면 수학적 계산을 아주 많이 하게 된다. 특히, 코딩테스트를 준비하다보면 이러한 계산을 돕는 api들을 많이 찾게 된다. 필자도 해당 api가 필요할 때마다 찾아보곤 했는데, 이번에 자주 사용하는 메서드 위주로 한 번 정리해보려한다. 자바에서는 계산을 위한 Math 클래스를 제공한다. Math 클래스는 java.lang 패키지에 위치하고 있기 때문에 별도의 import 없이 사용 가능하다. 다음은 Math 클래스의 메서드를 표로 정리한 것이다. 구분 메서드 절대값 / 부호 abs, signum 최대, 최소 값 max, min 소수점 올림 / 버림 ceil, floor, round, rint 제곱 / 제곱근 pow, scalb, sqrt, cbrt, hypot 삼각 함수 관련 toRadi..

JPA/Spring Data JPA

[JPA] JpaAuditing 기능으로 Entity 등록, 수정 시간 관리하기

프로젝트에서 중요한 도메인에는 상대적으로 많은 데이터가 필요하다. 이러한 데이터들 중 등록일, 수정일과 같은 날짜에 관련된 값은 많은 도메인에서 공통적으로 필요한 컬럼이다. 다음의 예제를 보자. 위 3개의 테이블에서는 CREATED_DATE (등록일), MODIFIED_DATE (수정일) 컬럼을 공통적으로 가지고 있다. 이렇게 날짜와 관련된 값들은 일일이 관리하기에 매우 귀찮을 수 있다. 등록일 같은 경우엔 그나마 데이터를 저장하기 전에 한 번만 값을 넣어주면 되지만, 수정일은 데이터를 변경할 때마다 모든 set 이나 update 메서드에 수정 시간을 변경하는 코드를 작성해야한다. JPA에서는 이러한 문제점을 해결하기 위해 Auditing 이라는 기능을 지원한다. Auditing 의 사전적 정의는 '감사..

Language/Java

[Java] 정렬된 배열에서 삽입 포인트 찾기 Arrays.binarySearch()

자바 배열을 사용하다 보면 원하는 값의 인덱스를 찾고 싶을 때가 있다. 이 때 Collection api를 사용한다면 다음과 같이 indexOf 메서드를 사용하면 된다. List abs = List.of(12, 14, 16); int index = abs.indexOf(14); System.out.println(index); // 1 하지만 요소가 primitive 타입인 경우, List 자료형으로 만들기 위해 Integer와 같은 Wrapper 클래스로 형태를 변환해주어야 한다. Arrays.binarySearch() 메서드는 정렬된 배열 요소중 중복된 값이 없음이 보장 될 경우, Collection의 indexOf 와 같은 결과값을 얻을 수 있다. binarySearch() int[] numbers ..

KAispread
기억의 정류장