일단 씻고 나가자
23.03.21 본문
2023. 03. 21 화요일
- 약수, 최대 공약수, 최소 공배수를 코드로 구하는 방법?
약수
// for문을 활용한다. 단 범위는 1부터 자신의 1/2까지며, 계산 후 자기 자신 또한 약수에 넣어주어야 한다. 이유는 나눌 수 있는 가장 작은 수가 2인데, (1은 모두 나눠지므로 제외) 자신의 반보다 큰 수는 나눠질 수 없기 때문이다.
예를 들어 10이라면 10 = 2*5 로, 5보다 큰 수가 2보다 더 작은 수를 곱하여 값을 낼 수 없기 때문. 하지만 본 방법은 for문을 모두 돈 후 자기 자신 또한 값에 넣어주어야 한다.
2. 최대 공약수
// 이중 for문을 돌면서, 각 숫자의 약수들 중 겹치는 값을 계속 max 갱신해주면 된다.
유클리드 호제법과 재귀함수를 사용하는 방법이 더 좋다. (추후 설명)
3. 최소 공배수
// 값의 곱 / 최대 공약수
- 순열이란? 중복순열이란? 원순열이란? (스트림) 코드로 (+팩토리얼)?
0. 팩토리얼 IntStream.rangeClosed(1, n).reduce(1, (x,y) -> x*y)
1. 순열 (permutation)
// 순서가 있는 나열. 중복을 허락하진 않지만. 순서가 다르면 다른 경우로 본다.
(ex. A-B와 B-A는 다른 것. 반장, 부반장을 뽑는 방법. n명을 k줄로 세우는 방법.)
계산식은 nPr = n! / (n-r)! for(i= n ~ n-r+1) result *= i;
이는 n * (n-1) * (n-2) ...를 r번 반복하는 것과 같음.
2. 중복순열
순서와 중복이 허용되며 서로 다른 n개 중 r개를 뽑는 경우.
(ex. 후보 2명, 유권자 3명일 때 투표 방법)
계산식은 n^r for(i= 1 ~ r) result *= n; || Math.pow(n,r);
n 개의 각 자리에 r번의 경우의 수가 중복하여 들어갈 수 있다.
3. 원순열
순열이면서, 원 모양으로 경우의 수가 세워지는 경우.
(ex. 원 모앙의 테이블에 다른 사람을 앉히는 경우)
계산식은 n!/n = (n-1)! for(i = 1 ~ n-1) result *= i;
원이므로 형태가 꼬리에 꼬리를 문 경우는 모두 같다고 본다.
하나의 경우의 수가 n개의 자리일 때, 원순열 연산으로 한 자리씩 밀렸을 때 자릿수만큼 n개의 동일한 경우가 나오므로 n을 나누어주어야 함.
- [Java] 자바 정규식의 함수, contains와의 차이, 주요 문법?
: 보통 String.matches()로 활용하며, contains는 단순히 매개변수의 여부를 반환하지만 matches는 정규표현식이 일치하는지를 반환함.
![](https://blog.kakaocdn.net/dn/cRyICQ/btr5cCVrTly/3YiqTg43O9RK4Cz3kKOWmK/img.png)
https://codechacha.com/ko/java-regex/
- [Java] StringBuilder란? 사용 이유?
: java.lang에 위치한 클래스 (import 필요 없음)
StringBuilder sb = new StringBuilder(); sb.append(“”); 로 사용한다.
문자열로 다시 바꿀 땐 String str = sb.toString();
자바에선 문자열의 + 연산이 메모리, 시간이 많이 소요된다. String은 변경 불가능하기 때문에 연결 시마다 새로운 문자열이 생기고, 이전 문자열은 가비지 컬렉터로 들어간다. 이러한 작업이 많아지면 중간 문자열로 메모리와 시간의 많은 누수가 생긴다.
SB는 변경 가능한 문자열을 생성해주어 이런 단점을 보완해준다.
- JPA란?
: 과거 순수한 JDBC -> 스프링이 중복을 해결해준 jdbc templates를 거쳐
sql 조차도 개발자가 짜는 것이 아닌 기술이 직접 쿼리를 DB로 날려주는 기술.
데이터베이스에 데이터를 쿼리 없이 저장할 수 있게 해준다.
스프링 데이터 JPA 기술은 JPA를 또 편리하게 사용할 수 있도록 감싼 기술.
- [DB] bigint, generated by default as identity란?
: bigint == long / generated~ == 아이디가 null일 경우 DB가 알아서 채워서 넣어줌.
- git이 status에서 commit 할 내용이 없음을 아는 방법?
: git 내부에는 index 폴더가 있는데, 사용자가 add한 내용들이 들어간다.
즉, git은 index에 저장된 add 대기 (stage area) 파일의 내용과 최신 commit에 tree, object로 존재하는 파일의 내용을 비교하여, 둘이 다르다면 add 했구나를 판단할 수 있다.