본문 바로가기

분류 전체보기138

피보나치(Fibonacci) 피보나치 알고리즘 피보나치 수열은 앞 두개 항의 값을 더한 것이 뒤 항의 값이 되는 수열이다. [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...] 이런 형태의 피보나치 수열에서 n번째 항의 값을 찾는 알고리즘을 만들어보자. 재귀 알고리즘 사용 피보나치 문제는 재귀 알고리즘을 이용하여 간략한 형태의 코드를 짤 수 있다. 재귀 알고리즘을 사용하기 위해서는 두 가지가 정의되어야 한다. 문제 정의, 탈출 요건이다. 피보나치 수열은 'n번째 항의 값은 n - 1항과 n - 2 항의 값과 같다' 로 정의할 수 있다. 즉, f(n) = f(n-1) + f(n -2)로 정의할 수 있다. 다만 첫째항, 두번째항의 경우 n - 1항과 n - 2항이 없어 조건이 충족되지 않는다. 따라서 더이상 위 식.. 2022. 7. 28.
#1. 3년 전 내가 지금 내 책상에 앉아본다면 어느 날 핸드폰 갤러리를 정리하다가 정말 오래된 코드를 하나 발견했다. 처음 개발 공부를 시작하던 2018년 10월 쯤있던 걸로 기억한다. 생활코딩을 보며 처음 자바라는 걸 알게 되고 코드를 쳐봤던 때다. if문과 for문, System.out.print 정도만 알고서 '별찍기'라고 부르던 걸 했었다. 이땐 이거 하나가 그렇게 신기했었다. 그리고 어려웠었다. 이 사진도 집에서 별을 피라미드 모양으로 콘솔에 출력해보기 위해 낑낑거리다가 찍은 사진이다. 오가는 지하철 안에서도 보면서 어떻게 해야 별이 원하는 대로 찍힐지 생각해보려고 찍어놨었다. 오랜만에 이 몇 줄짜리 코드를 들여다보니 실소가 나왔다. 이땐 이게 참 어려웠었네. 코드 정렬이 뭔지도 몰랐어서 괄호가 엉망진창이구나. 지금은 정말 이런 말 하고싶지.. 2022. 7. 25.
[JPA] @OneToMany 자식이 삭제되지 않는다 @Entity public class Parents { @Id @Column(name="PARENTS_ID") private Long id; @OneToMany(mappedBy = "parents", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List childList = new ArrayList(); } @Entity public class Child { @Id private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PARENTS_ID") private Parents parents; } 간단하게 위와 같은 엔티티가 있다. 현재 부모를 삭제하는 코드를 작성하는 상황이다... 2022. 7. 18.
퀵 정렬(Quick sort) 퀵정렬 시간복잡도 공간복잡도 모든 값을 비교해야하므로 N 반복을 거듭할 때마다 반씩 줄어듦으로 log N O(N log N) 배열을 병합할 때 병합 결과를 담아놓을 배열이 필요함 O(N) 일반적으로 pivot이라고 부르는 임의의 기준값을 정하고 pivot보다 큰 값, 작은 값을 정렬하는 알고리즘. 분할 정복과 재귀용법을 사용. [6, 3, 1, 4, 5, 2, 7] 예를 들어 이렇게 주어진 배열을 정렬한다고 해보자. 먼저 기준이 될 pivot을 결정한다. 간단하게 첫번째 요소를 pivot으로 결정해보자. ☝퀵정렬은 어떤 값이 pivot으로 설정되냐에 따라 성능이 큰 영향을 받는다. 최악의 경우 시간 복잡도가 O(N²)이 될 수도 있다. 그래서 보통 pivot 값은 배열의 첫 값, 중간 값, 마지막 값 중.. 2022. 7. 14.