본문 바로가기

반응형

전체 글

(76)
[알고리즘] Merge Sort Merge Sort Divide and Conquer(분할정복) 방법을 통해 구현 Pivot 없이 정확히 반씩 나누어 나중에 정렬하는 알고리즘 Process 1. 리스트 길이가 2 이상일 때 절반으로 분할한다 (divide) 2. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다 (conquer) 3. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병하며, 정렬 결과를 임시배열에 저장한다 (combine) 4. 임시 배열에 저장된 결과를 원래 배열에 복사한다 (copy) Code numbers = [] length = 100 for i in range(length, 0, -1): numbers.append(i) def merge(start, middle, end): temp = [] i, j =..
[알고리즘] Quick Sort Quick Sort Divide and Conquer(분할정복) 방법을 사용 기준 데이터인 Pivot을 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 알고리즘 Process 1. 기준 데이터(Pivot)를 고른다 2. 피벗 앞에는 피벗보다 값이 작은 데이터, 피벗 뒤에는 피벗보다 값이 큰 데이터들이 오도록 배열을 둘로 나눈다 이 때 피벗값은 위치가 정해진다. 3. 분할된 두개의 배열에 대해 재귀(Recursion)적으로 이 과정을 반복한다 Code numbers = [] length = 100 for i in range(length, 0, -1): numbers.append(i) def quickSort(start, end): global numbers if start >= end: re..
[알고리즘] Insertion Sort Insertion Sort 처리되지 않은 데이터 중 하나씩 골라 적절한 위치에 삽입하는 알고리즘 Process 1. 먼저 두번째 데이터와 첫번째 데이터의 대소를 비교해 두번째 원소가 더 작다면 교환한다 2. 다음 인덱스는 이전 데이터들과 비교해 적절한 위치에 둔다 Code numbers = [] length = 100 for i in range(length, 0, -1): numbers.append(i) for idx, num in enumerate(numbers): for n_idx in range(idx, 0, -1): if numbers[n_idx] < numbers[n_idx - 1]: numbers[n_idx], numbers[n_idx - 1] = numbers[n_idx - 1], numbe..
[알고리즘] Selection Sort Selection Sort 처리되지 않은 데이터 중 가장 작은 데이터를 선택해 처리되지 않은 데이터 중 맨 앞의 데이터와 바꿔가는 알고리즘 Process 1. 처리되지 않은 데이터 중 최소값을 찾는다 2. 처리되지 않은 데이터 중 맨 앞에 위치한 값과 교체한다 3. 그 다음 인덱스 부터 같은 방법으로 교체한다 Code numbers = [] length = 100 for i in range(length, 0, -1): numbers.append(i) for idx, num in enumerate(numbers): min_idx = idx for n_idx in range(idx + 1, length): if numbers[n_idx] < numbers[min_idx]: min_idx = n_idx num..
[알고리즘] Bubble Sort Bubble Sort 서로 인접한 두 데이터의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘 Process 1. 첫번째 원소부터 마지막 원소까지 인접한 데이터를 비교해 조건에 맞지 않다면 서로 교환 2. 1번 수행 후엔 가장 큰 원소가 맨 뒤로 이동하게 되어 정렬에서 제외되고 (배열의 크기 - 1)만큼 반복하면 모든 데이터가 정렬됨 Code numbers = [] length = 100 for i in range(length, 0, -1): numbers.append(i) for _ in range(length): for i in range(length - 1): if numbers[i] > numbers[i + 1]: numbers[i], numbers[i + 1] = num..
OOP 란? OOP Object Oriented Programming으로 객체 지향 프로그래밍을 뜻한다. 정확히 OOP가 무엇인지 왜 사용해야하는지 알아보자 예시 : 키보드로 입력을 받아 프린터로 출력하는 PJT 위의 프로젝트를 개발 요청받았다고 생각해보자 단일 입력, 단일 출력 키보드 하나와 프린터 하나를 처리하는 소스는 아래와 같다. public void copy() { int c; while ((c = readKeyboard()) ≠ EOF) { writePrinter(c); } } 다중 입력, 단일 출력 키보드, 프린터에 추가로 종이 테이프 리더기 입력이 추가되었다. 위의 소스를 수정해 플래그를 두어 입력을 구분한다. private boolean GptFlag = false; public void copy()..
[Spring] Spring 이란? Spring 도입 2000년대 초반에 EJB (Enterprise Java Bean) 표준을 사용했지만, EJB에 의존적으로 짜게 되어 코드가 복잡해졌으며 재기동에 시간이 많이 소요되고 개발하기 복잡했다. POJO (Plain Old Java Object) 오래된 방식의 간단한 자바 오브젝트를 다시 사용하자 ~ 는 말이 나올 정도였다. 위의 어려움으로 실무 개발자 둘이 Spring과 Hibernate (ORM 기술관련) 오픈 소스를 만들게 된다. Hibernate가 압도적으로 사용되자 이걸 거의 동일하게 가져와 자바표준 JPA가 만들어 진다. JPA의 구현체로는 Hibernate, EclipseLink 등등이 있고 80%이상 Hibernate를 사용한다. 자바는 객체지향 언어지만, EJB는 개발할수록 E..
[Spring] JUnit Test 시 로그 안남는 문제 해결 JUnit Test 중 성공/실패 여부는 JUnit tab 에서 확인가능한데, Console 창에 로그가 안남아 상세 로그 확인이 되지 않았다. 보통 log4j.xml이 /src/main/resources 아래에 생성되는 것 같은데 내 프로젝트엔 없었다.. 위의 경로에 log4j.xml 파일을 추가했고, 정상적으로 로그가 나왔다 !

반응형