algorithm 210

acmicpc.net 1427, 1463번(DP), 1520번(DP)

https://www.acmicpc.net/problem/1427 print ''.join(sorted(raw_input(),reverse=True))https://www.acmicpc.net/problem/1463 동적 계획법 문제. c 코드로 짤 경우 재귀로도 된다. http://blog.naver.com/swyu23/220757146631 처음에 요 분의 블로그와 비슷하게 짰는데 c로는 통과가 되는데 동일한 코드를 파이썬으로 바꿨을때 통과가 안 됬다. 그래서 아예 로직을 재귀를 안쓰도록 바꿨다. n = int(raw_input()) n_list = [-1 for i in range(1000001)] n_list[1] = 0 n_list[2] = 1 n_list[3] = 1 c = 4 while c ..

이중 해싱

바로 앞의 선형 탐색법의 문제점은 집적화였다. 선형 탐사법에서 두 번째 이후에 탐사되는 위치가 첫 번째 탐사와 무관하다면 집적화 문제를 완화시킬 수 있다. 특징.이중 해싱에서는 두 번째 탐사를 첫 번째 탐사와 무관하게 하기 위해 두 개의 해쉬 함수를 사용한다. ex.레코드의 갯수 N=17일때 해시 함수를 h1(k) = k mod 19, h2(k) = 8 - (k mod 8) 이라고 하자.키값이 (1, 19, 5, 1, 18, 3, 8, 9, 14, 7, 5, 24, 1, 16, 12, 5) 라고 하면....1은 [1]에 들어간다.(1%19==1)19는 [0]에 들어간다.(19%19==0)5는 [5]에 들어간다.(5%19==5) (여기까진 선형 탐색법과 같다.)그다음 1은 [8]에 들어간다.(1%19==1..

algorithm/theory 2016.07.14

선형 탐사법.

해시 테이블의 크기 M이 레코드의 개수 N보다 클때 사용하는 것으로 동일 주소로 해시되는 원소가 있으면 해시 테이블상의 오른쪽으로 이동하면서 비어있는 공간을 찾아서 첫번째로 만나는 빈 공간에 원소를 저장시킨다. 특징. 해시 테이블에서 할당된 공간이 연속해서 나타나는 뭉치가 있으면 이게 더 커지는 현상이 발생할수 있는데 이것을 집적화(클러스터링)라고 부른다. 이러한 집적화가 발생하게 되면 평균 탐색 시간을 증가시켜 성능을 저하시키게 된다. ex. 레코드의 갯수 N=17일때 해시 함수를 h(k) = k mod 19라고 하자. 키값이 (1, 19, 5, 1, 18, 3, 8, 9, 14, 7, 5, 24, 1, 16, 12, 5) 라고 하면.... 1은 [1]에 들어간다.(1%19==1) 19는 [0]에 들어..

algorithm/theory 2016.07.13

acmicpc.net 1297번 TV크기, 1251번 단어 나누기, 1252번(실패....)

https://www.acmicpc.net/problem/1297 1297번 TV크기. import math t = map(int,raw_input().split()) for i in range(2): print int(math.sqrt(t[0]**2 / float(t[1]**2 + t[2]**2)) * t[i+1]), https://www.acmicpc.net/problem/1251 1251번 단어 나누기. word = raw_input() new_word = [] for i in range(1,len(word)): for j in range(i,len(word)): for k in range(j+1,len(word)): #new_word = word[0:i] +' '+ word[j:k] +' '+ w..

acmicpc.net 1233번 주사위, 1247번 부호

https://www.acmicpc.net/problem/1233 1233번 주사위. 문제지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2 ≤ 20), S3(2 ≤ S3 ≤ 40)개의 면이 있다. (실제로는 주사위가 6개의 면이 있는 것이 정상이지만 특별한 주사위라 생각하자.) 문제는 세 개의 주사위를 동시에 던졌을 때 가장 높은 빈도로 나오는 세 주사위의 합을 구하는 것이다. 입력입력 파일의 첫째 줄에 정수 S1, S2, S3가 주어진다. 출력출력 파일의 첫째 줄에 가장 높은 빈도로 나오는 세 주사위 합을 구하는 것이다. 단 답이 여러개라면 ..

acmicpc.net 1292번 쉽게 푸는 문제, 1269번 대칭 차집합

https://www.acmicpc.net/problem/1292 1292번 쉽게 푸는 문제. 문제 동호는 내년에 초등학교를 입학한다. 그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다. 이 문제는 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 것이다. 하지만 동호는 현재 더 어려운 문제를 푸느라 바쁘기에 우리가 동호를 도와주자. 입력 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1≤A≤B≤1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. 출력 첫 줄에 구간에 속하는 숫자의 합을 출력한다. ..

acmicpc.net 1159번 농구 경기(python, c++)

https://www.acmicpc.net/problem/1159 문제국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름도 기억하지 못하고, 각 선수가 능력을 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다. 상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다. 입력첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다) 출력상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PR..

acmicpc.net 1120 문자열(c++)

https://www.acmicpc.net/problem/1120 문제길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i]!=Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이 때, A의 길이는 B의 길이보다 작거나 같다. 자 이제 A의 길이가 B의 길이가 같아질 때 까지 다음과 같은 연산을 할 수 있다. A의 앞에 아무 알파벳이나 추가한다.A의 뒤에 아무 알파벳이나 추가한다.이 때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오. 입력첫째 줄에 A와 B가 주어진다. A와 B의 길이는 최대 50이고, A의 길이는 B의 길이보다 작거나 같고, 알파벳 소문..

레드-블랙 트리 탐색.

2-3-4트리라는게 있는데 2노드가 많을 경우 공간의 낭비가 심하다는 단점이 있다. 이것의 단점을 극복한 것이다. 2-3-4트리에 관한 설명은 여기에 잘 되어 있다. 레드-블랙 트리의 성질.1. 루트나 외부 노드는 모두 블랙이다.2. 루트에서 외부 노드까지의 경로 상에는 2개의 연속된 레드 노드가 포함되지 않는다.3. 루트에서 각 외부 노드까지의 경로에 있는 블랙 노드의 수는 모두 같다.4. 루트에서 각 외부 노드까지의 경로에 있는 블랙 링크의 수는 모두 같다. 레드-블랙 트리의 자세한 설명은 이 블로그에 잘 나와있다. 실행시간은 표본이 작아서 그런지 이진 탐색 트리랑 비슷하다. // ConsoleApplication5.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "s..

algorithm/theory 2016.06.29

acmicpc.net 1037번 약수, 1076번 저항, 1100 하얀 칸

https://www.acmicpc.net/problem/1037약수 목록이 주어지면 해당 수를 구하는 문제. 주어진 수중 가장 작은 수와 가장 큰 수를 곱하면 원래 수가 나온다.# -*- encoding: cp949 -*- N = int(raw_input()) yak = map(int,raw_input().split()) print min(yak)*max(yak) https://www.acmicpc.net/problem/1076파이썬으로 풀기에는 너무너무 쉬운 문제이다. # -*- encoding: cp949 -*- ohm = {'black':0,'brown':1,'red':2,'orange':3,'yellow':4,'green':5,'blue':6,'violet':7,'grey':8,'white':9..

acmicpc.net 1008번 A/B

https://www.acmicpc.net/problem/1008 문제A/B를 계산하시오. 입력첫째 줄에 A와 B가 주어진다. (0 < A,B < 10) 출력첫째 줄에 A/B를 소수점 9자리 이상 출력한다. 절대/상대 오차는 10-9 까지 허용한다. 방법론.A/B를 계산하는데 소숫점을 9자리이상 출력하고, 오차가 낮아야 한다. 당연히 그냥 /나 float같은 함수를 쓰게 되면 값이 적당히 나오고, 알고리즘 문제인만큼 이렇게 간단한게 나올리가 없다. 나누기를 구현하는 문제이다. 나누기를 구현하면 된다. # -*- encoding: cp949 -*- from __future__ import print_function n,m = map(int,raw_input().split()) flag = True for ..

이진 삽입 정렬(binary insertion sort)

이진 삽입 정렬은 삽입 정렬에 이진 탐색을 합친 알고리즘이라고 한다. 앞에 적은 삽입정렬을 보면 알겠지만 정렬되지 않는 원소를 삽입하기 위해서 왼쪽 원소들을 순차적으로 비교해나간다. 그런데 이진 삽입 정렬은 이미 왼쪽 원소들은 정렬되어있으므로, 이 사실을 기반으로 이진 탐색으로 삽입할 위치를 찾는다. 시간복잡도. 최고 평균 최악 삽입 정렬 O(N) O(N^2) O(N^2) 이진 삽입 정렬.O(NlogN) O(N^2) O(N^2) 직접 소스코드를 돌려 본 결과 시간복잡도로 추측해 본것처럼 최고의 경우에만 조금 빨라질거라는 예상과 달리 최고의 경우에는 약간 느려지고, 나머지 경우에는 약간 빨라졌다. 소스.# -*- encoding: cp949 -*- import time import random N = 10..

algorithm/theory 2016.06.18

동적 계획법(다이나믹 프로그래밍, DP).

중간 계산값을 다른 변수에 미리 변수에 저장해놓는 형태의 방법. 동적 계획법을 설명하면 항상 같이 나오는 피보나치 수열 관련해서.. 읽어보기 : http://xaya_epica.blog.me/220061394723 http://cafe.naver.com/ehclub/book5079308/1748 요약 : 재귀함수로 피보나치를 구현하면 뒤로 갈수록 느려진다. 이유는 앞의 수를 계산할때도 난 이미 값을 알지만 프로그래밍적으로는 재귀하므로 계속해서 함수 속으로 들어가기 때문. 동적 계획법을 이용하면 이미 아는 값은 변수에 따로 넣어 줌으로서 이러한 재귀를 피할 수 있다. 아래 코드는 재귀와 동적 계획법 차이 예제이다. 따로따로 실행시켜보자. # -*- encoding: cp949 -*- def fibonacc..

algorithm/theory 2016.06.17

이진 트리 탐색.

탐색 방법론.어떻게 적을까 하다가 너무 잘되있는 블로그를 찾음.http://blog.naver.com/PostView.nhn?blogId=4717010&logNo=60209820587&parentCategoryNo=4&categoryNo=&viewDate=&isShowPopularPosts=true&from=search 특징.1. 이미 입력된 자료가 정렬되어 있다던지, 작은 값과 큰 값이 번갈아 나오는 경우에는 시간 복잡도가 순차 탐색과 같아진다. # -*- encoding: cp949 -*- import time import random import Queue N = 10000 class Dict: class node: def __init__(self,k,ll,rr): self.key = k self...

algorithm/theory 2016.06.16

acmicpc.net 1032번 명령 프롬프트

https://www.acmicpc.net/problem/1032 문제시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이 때 원하는 파일을 찾으려면 다음과 같이 하면 된다. dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이 때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다. 이 문제는 검색 결과가 먼저 주어졌을 때, ..

이진 탐색.

탐색 방법론.1. 리스트를 정렬시킨다.2. 처음에는 중간값으로 시작하여 중간값보다 크다 싶으면 (중간값 + 끝값)/2와 값 비교, 이런식으로 반씩 줄여나간다. 당연히 중간값보다 작다 싶으면 (처음값+중간값)/2와 값 비교, 이런식으로 진행한다. 특징.1. 리스트가 이미 정렬되어 있어야만 한다.2. 순차 탐색보다 빠르지만 리스트가 정렬되어 있어야 한다.3. logN+1번 이상의 비교를 하지 않는다. 예전에 여기서 만들었었다. # -*- encoding: cp949 -*- import time import random import Queue N = 10000 class Dict: class node: def __init(): self.key = -1 def __init__(self,max): self.a =..

algorithm/theory 2016.06.15

순차 탐색.

탐색 방법론.그냥 처음부터 끝까지 하나하나 다 비교한다. 특징.1. 느리지만 세부적인 방법론에 따라 빠를 수도 있다.* 교수님이 말씀했던건데 네이버나 다음 등의 포털사이트에서 자주검색되는 질문등은 파일로 만든후 순차적으로 보여준다고 한다. 자주 검색될수록 앞에 갖다놓으면 더 빨라진다고 함.(맞는지는...)2. 성공적인 탐색의 경우(최선) 1번의 비교로, 최악의 경우 N번의 비교가 필요하므로 평균적으로 N/2번의 비교가 필요하다. 최악의 경우에는 모든 원소를 비교해야 하므로 항상 N+1번의 비교가 필요하다. 5000개 돌리면 2.8초가 나온다. # -*- encoding: cp949 -*- import time import random import Queue N = 5000 class Dict: class..

algorithm/theory 2016.06.15

기수 정렬.

정렬 방법론.원소들의 첫,두,~~n번째 자리수 따라 새로운 리스트에 넣는다.ex) 첫번째의 경우 71은 [1]위치에, 97은 [7]위치에 들어간다.(일의자리 기준)두번째의 경우 십의 자리수를 기초로 정렬한다.~~ n의 자리수를 기초로 정렬. 설명이 잘된 블로그 : http://kaheeyah.blog.me/220704468091 # -*- encoding: cp949 -*- import time import random import Queue N = 10000 M = 5 def swap(a,i,j): a[i],a[j] = a[j],a[i] def CheckSort(a,n): Sorted = True for i in range(n): if a[i] > a[i+1]: Sorted = False if not ..

algorithm/theory 2016.06.14

계수 정렬.

정렬 방법론.1. 원소들의 갯수를 세어 배열 count에 저장한다.2. 갯수된 정보를 바탕으로 배열을 재구성한다. 특징.1. 입력 키가 일정한 범위, ex) 1~M사이의 정수로만 이루어져 있다는 것을 미리 알고 있는 경우에 사용 가능하다.2. 추가 기억장소가 필요하다. 시간 복잡도 : O(N) (중복된 for반복문이 없음.) 10만개로 돌렸음에도 불구하고 빠르다. # -*- encoding: cp949 -*- import time import random N = 100000 M = 1000 def swap(a,i,j): a[i],a[j] = a[j],a[i] def CheckSort(a,n): Sorted = True for i in range(n): if a[i] > a[i+1]: Sorted = Fa..

algorithm/theory 2016.06.14

힙 정렬.

정렬 방법론.1. heapify()함수를 호출해서 힙으로 만든다.힙 구조로 만드는 과정.ex)6 2 8 1 3 9 4 5 10 7 이라는 리스트가 있다고 하자. 이걸 이진 트리로 나타내면.가 되고 이걸 top down히프로 변환하자. 변환방법은맨위의 6 2 8 을 보면 가장 큰 수인 8이 맨 위에 있지 않다. 그러므로 6과 8을 교환한다. (부모가 자식 둘보다 커야 한다.) 그다음에는 2 1 3부분의 3과 2를 교환하고, 이런식으로 하나씩 간다. 그러면 이런식으로 된다. 특징.1. 우선순의 큐의 일종인 힙을 사용한다.2. 제자리 정렬 알고리즘.3. 퀵정렬보다 오래걸림. 시간복잡도 : O(NlogN) # -*- encoding: cp949 -*- import time import random N = 100..

algorithm/theory 2016.06.13

합병 정렬.

정렬 방법론. ex) 리스트 A = [6, 2, 8, 1, 3, 9, 4, 5, 10 ,7]이 있다고 하자. 1. 리스트 A를 이등분하여 L=[6, 2, 8, 1, 3], R=[9, 4, 5, 10, 7]로 나눈다. 2. L과 R을 각각 정렬하자. 3. 두 리스트 L과 R을 합병하자. 더 참고 http://dntkrl79.blog.me/220733261240 http://blog.naver.com/goldtop0307/80105554620 합병하는 방법. i, j가 각각 있고 i,j중 작은것부터 k위치에 차례차례 들어간다. 특징. 1. 기억장소가 많이 필요하다.(기본 리스트가 100개면 100개의 새로운 기억장소가 필요하다.) 좋은 예제. 번호 순서대로 진행되며 왼쪽으로 먼저 쭉 간 다음에 더 나눌게 없..

algorithm/theory 2016.06.13

퀵 정렬.

정렬 방법론.1. 분할.1). 가장 오른쪽 값을 피봇으로 정한다.2). l부터 시작하여 오른쪽으로 이동하며 피봇보다 큰 값을 가진 원소를 찾는다.3). r-l부터 시작하여 왼쪽으로 이동하며 피봇보다 작은 값을 가진 원소를 찾는다.4). i=l, j=r-l이 들어가게 되며 i가 j보다 커지면(즉 왼쪽 오른쪽이 교차되면) 반복문을 벗어난다.5). a[i]와 a[j]를 서로 교환한다. 1). l값은 인덱스 1로 시작하고,(0은 감시 키값) r값은 끝에서 시작한다. 끝값은 피봇이라고 위에 적었는데 어차피 j=r-l이므로 j는 피봇을 제외한 오른쪽 끝값이 된다. 특징.1. 빠르다.2. 최악의 경우 선택, 삽입정렬과 같다. 예시. 책에서 가져옴. 찾아보니 여기에 있다. 리스트 a = [6, 2, 8, 1, 3, 9..

algorithm/theory 2016.06.12

쉘 정렬.

정렬 방법론.1. h값에 따라 리스트를 새로 만든다. 리스트의 길이는 15이고 h=4일경우 ex) [1번째,5번째,9번째,13번째],[2번째,6번째,10번째,14번째] .. h=13일 경우는 [1번째,14번째],[2번째,15번째] 두개의 리스트가 나온다.(리스트 길이 15인 경우.)2. h값은 3*h+1로 정한다. h=1,4,13,40,121,264...이런 순으로 만들어지는데 리스트의 길이보다 작으면서 가장 큰 값을 선택한다. 리스트의 길이가 15면 h=13을 고른다.3. 정렬시 h=13으로 정렬했으면 그다음으로 작은 h=4로 정렬한다.(그다음은 h=1)4. 각각 새로 만들어진 작은 리스트들은 각각 삽입 정렬을 수행시킨다.5. h=1일경우 그냥 삽입 정렬을 수행한다. 특징.1. 정렬이 된 경우가 유리한..

algorithm/theory 2016.06.11

삽입 정렬.

정렬 방법론.1. 0번째는 값이 맞는지 키값으로 사용하기 위해 -1처럼 가장 작은 값으로 둔다.2. ~1번째까지와 2번째를 비교해서 2번째 원소가 들어갈 자리를 ~1번까지중 만든다음 2번째 원소를 집어넣는다.3. ~2번째까지와 3번째를 비교해서 ~~~ 나머지 동일.4. 끝까지 간다. 특징.1. 계속 비교하므로 리스트 크기가 크면 불리하다. (버블과 비슷)2. 정렬이 거의 된 데이터일 경우 더 유리하다.(교환이 적게 일어나므로) (버블과 비슷)3. 데이터가 역순인경우, 즉 최악의경우에 시간이 엄청 느리다. (버블과 비슷)4. 버블정렬과 다른점은 버블정렬은 n번째와 n+1번째만 비교해서 자리를 바꾸지만 삽입 정렬은 n+1번째의 데이터를 0~n번째까지중 어디에 들어가야할지 자리를 찾아서 집어넣는다는것. 시간 ..

algorithm/theory 2016.06.11

acmicpc.net 1004번 어린 왕자

https://www.acmicpc.net/problem/1004 문제어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미는 어린 왕자에게 “나 지금 몹시 목이 말라. 하지만 별다방 카라멜 마키아또가 아니면 싫어. 샷이랑 휘핑크림 추가 꼭 해오고. 아참, 여기 제휴카드 줄 테니까 사이즈 업글도 잊지마~”라는 한 마디를 던졌고, 어린 왕자는 이를 구하기 위해 은하수를 따라 긴 여행을 하기 시작했다. 하지만 어린 왕자의 우주선은 그렇게 좋지 않아서 행성계 간에 이동을 최대한 피해서 여행 해야 한다. 아래의 그림은 어린 왕자가 펼쳐본 은하수 지도의 일부이다. 점선은 어린 왕자가 출발점에서 도착점까지 도달하는데 있어서 필요한 행성계 진입/이탈 횟수를 최소화 하는 경로이..

acmicpc.net 1009번 분산처리

https://www.acmicpc.net/problem/1009 문제재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다. 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... , 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ... 총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라. 입력입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음..

버블 정렬.

정렬 방법론.1. N번째 위치와 N+1번째 위치의 값을 비교해서, N+1번째 위치의 값이 더 클 경우 N번째와 N+1번째의 값을 교환함. 특징.1. 계속 비교하므로 리스트 크기가 크면 불리하다.2. 정렬이 거의 된 데이터일 경우 더 유리하다.(교환이 적게 일어나므로)3. 데이터가 역순인경우, 즉 최악의경우에 시간이 엄청 느리다. N개의 원소에 대해서 N-1번의 비교를 해야 되기 때문에비교횟수는 N(N-1)2, 시간 복잡도는 O(n^2) 이 된다. 10000개의 데이터를 돌려봤는데 예상한대로 나왔다. 시간복잡도가 같이 n^2인데도 시간 차이가 나는건 위에서 언급했듯이 최악의 경우에 교환이 더 많이 일어나서 오래걸리는것으로 보인다. # -*- encoding: cp949 -*- import time impo..

algorithm/theory 2016.06.10

선택 정렬.

정렬 방법론. 1. 최솟값을 찾아서 0번째 위치와 바꿈. 2. 0번째 위치를 제외한 최솟값을 찾아서 1번째 위치와 바꿈. 3. N번째까지의 위치를 제외한 최솟값을 찾아서 N번째와 바꿈. 4. 끝까지 가면 성공. 특징. 1. 정렬되있는 순서로 들어오던 아니던 실행시간이 비슷하다. 항상 비교하는양이 동일하기 때문. 2. 추가적인 기억장소를 요구하지 않는다. ex) N개의 원소에 대해서 N-1번의 비교를 해야 되기 때문에(항상 N-1번 비교) 비교횟수는 N(N-1)2, 시간 복잡도는 O(n^2) 10000개의 데이터를 랜덤한 데이터, 최고, 최악의 상황으로 가정하고 돌려봤는데 셋다 비슷비슷할 것이라는 예상과 달리 최악의 상황이 시간이 조금 더 걸렸다. 예상대로라면 다 똑같이 나와야 하는데.. 개인적인 생각으로..

algorithm/theory 2016.06.10