본문 바로가기

전체 글

(121)
Sql Developer 관리자 계정으로 접속하기 1. Sql Developer에서 아래와 같이 +버튼을 눌러 접속할 계정을 생성한다. 2. 아래와 같이 입력 후 한다. 비밀번호는 오라클 설치시 설정한 비밀번호를 입력한 뒤 테스트 버튼을 눌러 접속에 되는지 확인한다. 3. 접속에 성공하면 저장버튼을 눌러 저장한다.
C++ STL sort() 함수다루기02 C++ STL sort() 함수다루기02 "C++ STL sort() 함수다루기01" 객체로 정렬하는 방법에 대해 알아보았다. 하지만 객체로 정렬하는 경우 프로그램 속도상 별로 좋지 않다. 클래스를 정의하고 정렬방법에 대해 정의해야 하기 때문이다. 실제 프로그래밍 대회에서는 클래스를 사용하는 방법은 적절하지 않다. 객체를 사용하는 방법은 실무에서 사용하며 프로그래밍 대회에서는 페어(Pair) 라이브러리를 사용한다. 아래 예제를 보자. 데이터가 2개이고 한 개의 데이터(점수)로 정렬하는 방법 #include #include #include using namespace std; int main(void){ vector v; //점수로 정렬이 이루어진다. 클래스를 정의하지 않고 빠르게 정렬할 수 있다. => ..
C++ STL sort() 함수다루기01 C++ STL sort() 함수다루기01 정렬은 컴퓨터 공학의 오래된 연구 분야이므로 이미 아주 훌륭한 정렬관련 라이브러리가 존재한다. 그렇기 때문에 필요시 이 라이브러리를 가져다 쓰면 된다. sort() 함수의 기본 사용방법 sort() 함수는 C++ algorithm 헤더에 포함되어 있다. 기본 사용법은 아래와 같다. #include //cout을 사용하게 해줌. #include using namespace std; void show(int sort[]){ for(int i = 0; i < 10; i++){ cout score < student.score; } }; void show(Student students[]){ for(int i = 0; i < 5; i++){ cout
병합정렬(Merge Sort) 병합정렬(Merge Sort) 퀵 정렬과 같이 병합정렬도 '분할 정복' 알고리즘이다. 시간복잡도가 O(N * logN)을 가진다. 퀵 정렬은 최악의 경우 O(N ^ 2)의 시간복잡도를 가진다. 하지만 병합정렬은 정확히 반절씩 나눈다는 점에서 최악의 경우에도 O(N * logN)을 보장한다. 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요. 7 6 5 8 3 5 9 1 병합정렬은 퀵 정렬과 다르게 피벗 값이 없다. 항상 반으로 나누기 때문이다. 바로 이 특징이 단계의 크기가 logN이 되도록 만들어준다. 아래는 병합정렬 과정을 그림으로 나타낸 것이다. 1단계에서 2개씩 정렬을 한다. 즉, 7과 6을 묶어 7과 6중 작은 숫자가 앞으로 오게 정렬이 된다. 5와 8을 묶어 5가 앞으로 오고 8이 뒤..
기초 정렬 알고리즘 문제 풀이 기초 정렬 알고리즘 문제 풀이 백준 온라인 저지 = https://www.acmicpc.net/ 문제 1 https://www.acmicpc.net/problem/2750 데이터의 개수가 1000개 이하이다. N^2을 하면 백만이다. 일반적으로 온라인 채점 시스템같은 경우는 1초에 1억번 정도 연산을 할 수 있다고 보면 된다. 즉, 백만개정도의 연산은 무리없이 가능하다. #include //선택정렬 //데이터 개수가 1000개므로 1001개까지 배열을 만든다. //이유는 배열의 인덱스가 0부터 시작하기 때문이다. //즉, 인덱스를 0 ~ 1000까지 갖도록하게 하기 위함이다. int array[1001]; void show(int number){ int i; for(i = 0; i < number; i+..
퀵 정렬의 시간복잡도와 작동원리 퀵 정렬의 시간복잡도와 작동원리 퀵 정렬은 이름 그대로 빠른 알고리즘이다. 시간복잡도가 O(N * logN)이다. 2 ^ 10 = 1,000 2 ^ 20 = 1,000,000 log2N -> N이 1,000,000 일 때? 20 3 7 8 1 5 9 6 10 2 4 -> 3을 기준으로 오른쪽을 봤을 때 3보다 큰값(7)과 왼쪽을 봤을 때 3보다 작은 값(2)를 바꾼다. 3 2 8 1 5 9 6 10 7 4 -> 다시 오른쪽과 왼쪽을 보면서 큰값과, 작은 값을 찾아 바꾼다. 3 2 1 8 5 9 6 10 7 4 -> 이번에 서로 엇갈렸다(작은 값의 인덱스가 큰 값의 인덱스보다 더 작을 때). 이럴때는 작은 값과 3을 바꾼다. 1 2 3 8 5 9 6 10 7 4 -> 3보다 왼쪽에 있는 값은 3보다 작다...
삽입정렬 삽입정렬 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요. 1 10 5 8 7 6 4 3 2 9 먼저 1을 보자.1은 이미 가장 앞에 위치하기 때문에 삽입할 위치가 없다. 1 10 5 8 7 6 4 3 2 9 10을 보자. 10은 앞에 들어갈 수 있는 위치가 2군데이다. _1_ 10 5 8 7 6 4 3 2 9 5를 보자. 들어갈 위치가 총 3군데 이다. 5가 들어갈 가장 적절한 위치는 가운데 이다. _1_10_ 5 8 7 6 4 3 2 9 -> 1 5 10 8 7 6 4 3 2 9 8을 보자. 8은 들어갈 수 있는 곳이 4군데이다. 3번째에 위치해야 한다. _1_5_10_ 8 7 6 4 3 2 9 -> 1 5 8 10 7 6 4 3 2 9 7을 보자. 들어갈 수 있는 곳이 5군데이다. 3번째..
버블정렬 버블정렬 버블정렬은 바로 가까이에 있는 두 숫자끼리 비교를 해서 당장 더 작은 숫자를 앞으로 보내주는 것을 반복하는 것이다. 다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요. 1 10 5 8 7 6 4 3 2 9 #include //버블정렬 //선택 정렬과 같이 등차수열이기 때문에 시간복잡도는 선택정렬과 같이 // O(N * N)이다. //하지만 선택정렬보다 더 느리다. //계속 바로 옆에 값과 자리를 바꾸는 연산을 하기 때문이다. //선택 정렬은 가장 작은 요소를 골라서 마지막에 한 번 스와핑을 한다. //버블 정렬은 선택정렬보다 훨씬 더 비효율적이다. //시간복잡도는 선택정렬과 같지만 실제 수행시간은 선택정렬보다 더 걸린다. //알고리즘 중에서 가장 느리다. int main(void){ i..