알고리즘 4

백 트래킹 예제로 이해하기

문제: https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 백 트레킹 : https://namu.wiki/w/%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9 코드: package step_by_step.level15; import java.util.Scanner; public class N과M_1 { static int[] arr; static boolean[] visited; static void asdf (int n, int..

알고리즘 2022.08.15

병합정렬, 힙정렬, 도수정렬

배열을 앞부분과 뒷부분으로 나누어 정렬하고 다시 병합하는 정렬 알고리즘 시작 복잡도 = O(nlogn) / 배열 병합의 시간 복잡도(O(n)), 병합 정렬의 시간 복잡도 (O(logn)) 안정적인 정렬 그림 이해(출처 위키백과) https://commons.wikimedia.org/wiki/File:Merge-sort-example-300px.gif#/media/파일:Merge-sort-example-300px.gif File:Merge-sort-example-300px.gif - Wikimedia Commons No higher resolution available. commons.wikimedia.org 코드: 깃 허브 chap6/실습/SixToThirteen 힙(heap)을 사용한 정렬 알고리즘 힙..

알고리즘 2022.08.05

shellSort 이해하기

static void shellSort(int[] a, int n) { for (int h = n / 2; h > 0; h /= 2) { for (int i = h; i = 0 && a[j] > tmp; j -= h) { //j가 0보다 크고, 해당 요소수가 비교할 값 보다 크면 a[j + h] = a[j]; //비교할 값이 있었던 자리에 j번째 요소값 넣기 그리고 j는 h만큼 이동후 j가 음수면 반복 종료 } a[j + h] = tmp; // 집게로 뽑은 값을 비교한 j자리에 넣어준 것임(마지막에 j-=h를 실행하고 음수인 것을 확인하고 반복문을 종료하였기 때문) ..

알고리즘 2022.07.18

하노이 탑이 이해가지 않는 나에게...

static void move(int no, int x, int y) { if (no > 1) move(no - 1, x, 6 - x - y); System.out.printf("원반 [%d]을(를) %d번 기둥에서 %d번 기둥으로 옮김\n",no,x,y); if (no > 1) move(no-1,6-x-y,y); } 위 메소드에 따라 재귀호출을 해가며 완성한 원반 4개짜리 하노이 탑의 모습이다. 순서대로 표현하면 다음과 같다. 하노이의 탑의 근본적인 해결책은 맨 아래원반을 제외하고 나머지 원반들이 중간 기둥에 모인 후, 맨 아래원반을 세번째 기둥으로 옮기고 다시 중간 기둥에 있는 원반들을 세번째 기둥에 옮기는 것이다. 위 그림에서 큰 틀로 본다면 다음과 같다. 원반이 4개일 경우 위 3개의 원반들을 묶..

알고리즘 2022.06.21