전체 글 99

[알고리즘] 4. 정렬 - 삽입정렬 (Insertion Sort)

1. 삽입정렬 : 각 숫자를 적절한 위치에 삽입하는 방법으로 문제를 해결 다른 정렬 방식들은 무조건 위치를 바꾸는 방식이라면, 삽입정렬은 필요할때만 위치를 바꿈 앞에 있는 원소들이 이미 정렬이 되어있다고 가정을 함 1 10 5 8 7 6 4 3 2 9 _ 1 _ 10 5 8 7 6 4 3 2 9 => 10은 1의 앞이나 뒤에 삽입될 수 있으나, 1보다 크므로 뒤에 위치 _ 1 _ 10 _ 5 8 7 6 4 3 2 9 => 5가 삽입될 수 있는 세 자리중 1과 10사이에 위치 _ 1 _ 5 _ 10 _ 8 7 6 4 3 2 9 => 8 앞의 숫자들은 이미 정렬이 되어있는 상태이므로 새로 정렬을 할 필요가 없음!! ... 2. 시간복잡도 : 소스코드상 반복문이 두 번 들어가있다는 점에서 O(N^2)으로 선택..

[알고리즘] 3. 정렬 - 버블정렬 (Bubble Sort)

1. 버블정렬 : 바로 가까이에 있는 두 숫자끼리 비교해서 당장 더 작은 숫자를 앞으로 보내주는 것을 반복하는 알고리즘. 구현은 가장 쉽지만 가장 비효율적인 알고리즘 1 10 5 8 7 6 4 3 2 9 1 10 5 8 7 6 4 3 2 9 1 5 10 8 7 6 4 3 2 9 .... 한 번의 반복이 끝났을 때 가장 큰 값이 맨 뒤로 가게 됨 2. 버블정렬의 시간 복잡도 => 10 + 9 + 8 + 7 + ... + 1 => N * (N + 1) / 2 => O(N * N) 선택정렬과 같은 시간복잡도를 가지지만, 실제로 연산이 더 오래걸림 자리를 바꾸는 연산을 매번 해야하므로 비효율적

[알고리즘] 2. 정렬 - 선택정렬

1. 선택정렬 : 가장 작은 것을 선택해서 제일 앞으로 보내는 알고리즘 1 10 5 8 7 6 4 3 2 9 (하나씩 앞으로 보냄) 2. 선택 정렬의 시간 복잡도 : 데이터의 갯수가 N개 일 때 총 몇 번의 비교 연산을 해야 되는지 10 + 9 + 8 + .. + 1 (등차수열) => 10 * (10 + 1) / 2 = 55 10개의 숫자를 정렬하려면 최소한 55번의 비교연산을 해야 함 => N * (N+1) / 2 => N * N의 수행시간을 가지고 있다고 표현 => O(N * N) * 빅오표기법 : 특정한 알고리즘의 수행시간을 가장 간략하게 표현 * 선택정렬은 데이터의 갯수가 많을 수록 시간 복잡도가 증가하므로 비효율적인 알고리즘이다

[알고리즘] 1. 알고리즘 개요

알고리즘이란 '문제를 해결하는 절차'입니다. ▶ 알고리즘은 입력, 출력, 유한성, 명백성, 효과성을 만족해야 합니다. ▶ 알고리즘은 분석을 통해 좋고 나쁨을 평가할 수 있습니다. ▶ 알고리즘은 기초 프로그래밍과 자료구조를 공부한 이후에 배우면 좋습니다. ▶ 알고리즘은 논리이며 수학이고 실질적인 개발에 적용되는 기초적인 아이디어입니다. 알고리즘은 실제 개발의 전체 과정에서 사용됩니다. ▶ 실제 프로그램을 개발할 때 효율적인 알고리즘을 적용함으로써 원하는 결과를 도출해야 합니다. ▶ 스케줄 관리 프로그램 : 달력에서 특정한 달에 해당하는 일 수는 어떻게 구할까? ▶ 내비게이션 프로그램 : 여러 개의 중간 지점을 거쳐서 특정 지점으로 갈 때 가장 빠른 길은 무엇일까? ▶ 게시판 프로그램 : 한 페이지당 게시글..