본문 바로가기

알고리즘9

[알고리즘] Sliding window 배열에서 특정 구간을 설정하고 구간별 데이터를 비교해야할때 사용하기 용이한 알고리즘 ex) 매출기록이 배열로 주어질때 변수 k일간의 최대매출기록을 구하라 // n일간 매출기록 // k = k일간의 연속매출 // arr = 매출 array // k일간의 최대매출기록은? public static int solution(int n, int k, int[] arr) { int answer = 0; // 최대 매출기록으로 갱신될 변수 int sum = 0; for(int i=0; i 2022. 6. 1.
[알고리즘] two pointers 요소가 동일하지 않은 배열의 공통요소를 찾을때 사용하기 유용한 알고리즘 예제) 두 배열의 공통원소를 구하시오. public static void solution(int n, int[] arr, int m, int[] arr2) { // n = arr 배열의 길이 // arr = 대상배열 // m = arr2 배열의 길이 // arr2 = 대상배열 List list = new ArrayList(); Arrays.sort(arr); Arrays.sort(arr2); int p1 = 0, p2 = 0; // 두개의 포인터 생성 while(p1 < n && p2 < m) { // 두 배열의 끝까지 수행 if(arr[p1] == arr2[p2]) { // 공통원소가 발견되면 list.add(arr[p1]); //.. 2022. 6. 1.
[알고리즘] 에라토스테네스 체 1부터 자연수 N까지의 소수를 확인할때 사용하기 용이한 공식이다. 이중반복문을 피하여 소수를 구할 수 있기 때문에 효율성에서 많은 이점이있다. 자연수 N+1의 크기를 가지는 배열을 만들어 2부터 반복문을 실행하여 배열의 데이터가 0(소수)라면 해당 수의 배수를 모두 1로 변경하여 소수에서 제외 시킨다. ex) 자연수 N 까지의 소수의 총 개수를 구한다. public static int solution(int n) { int[] arr = new int[n+1]; int answer = 0; for (int i = 2; i 2022. 5. 12.
[알고리즘] 다양한 정렬 알고리즘 배열을 특정 기준으로 정렬해야 할 때 사용할 수 있는 정렬 알고리즘에 대한 정리 모든 예시는 오름차순 기준으로 작성하였습니다. 삽입정렬 이중 반복문을 사용하여 기준점에서 배열의 앞쪽으로 가며 비교한다. 기준점 데이터와 비교하여 교환대상이면 앞의 인덱스와 데이터와 교환하며 반복문이 진행된다. 기준점의 위치는 기준점보다 큰 수가 없을 때까지 진행한다. public static int[] solution(int n, int[] arr) { for (int i = 0; i = 0; j--) { // 기준점의 한칸뒤에서 부터 시작 if (arr[j] > tmp) arr[j + 1] = arr[j]; 앞의 값이 더 크면 교.. 2022. 4. 28.