경고 : 최신판이 아닙니다. 이 문서의 오래된 판을 편집하고 있습니다. 이것을 저장하면, 이 판 이후로 바뀐 모든 편집이 사라집니다. 로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!{{쉽게 알 수 있다 시리즈|이 문서는 정말 쉽습니다.|문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.}} [[분류:컴퓨터_프로그래밍]] {{토막글}} == 들어가기 전 == 빨간 컵에 [[칠성사이다]]가 담겨져 있고 파란 컵에 [[스프라이트]]가 담겨져있다. 여기서 파란 컵에 칠성사이다를 넣고 빨간 컵에 스프라이트를 넣을려면 어떻게 해야 될까? 해답은 간단하다. 다른 컵(여기선 노란 컵이라 하겠다.)에 빨간 컵의 칠성사이다를 노란 컵에 붓고 빨간 컵이 비게 되면 파란 컵의 스프라이트를 빨간 컵에 붓고 파란 컵이 비게 되면 노란 컵에 담았던 칠성사이다를 파란 컵에 부으면 된다. 갑자기 노란 컵이 튀어나와서 쌩뚱맞다고 생각하는 사람이 있을 수 있겠지만 다른 컵을 쓰면 안된다고는 안했다. 알고리즘은 문제를 해결하기 위한 것이지 [[수수께끼]]나 [[넌센스]] 문제가 아니다. 이 이야기가 왜 나왔냐면 프로그래밍을 할 때 아래 소스 처럼 2개의 변수 값을 서로 바꿀 경우 변수 2개 가지고 끙끙 거리지 말고 간단하게 변수 하나 더 사용해서 쉽게 해결하면 되기 때문이다. <del>이제 제 3의 변수를 쓰지 않고 변수 2개의 값을 맞바꾸는 알고리즘을 생각해보자.</del> {| class="collapsible collapsed" |- ! 의사코드 펼치기 |- | 1 '''function''' 바꾸기(''첫번째컵'', ''두번째컵''): 2 ''잠시담아둘컵'' ← ''첫번째컵'' 3 ''첫번째컵'' ← ''두번째컵'' 4 ''두번째컵'' ← ''잠시담아둘컵'' 5 '''end function''' 6 7 '''function''' 지금상황(): 8 ''파란컵'' ← "칠성사이다" 9 ''빨간컵'' ← "스프라이트" 10 바꾸기(''파란컵'', ''빨간컵'') 11 '''print''' ''파란컵'' 12 '''print''' ''빨간컵'' 13 '''end function''' |- |} <source lang="csharp" class="mw-collapsible mw-collapsed"> using System; namespace 사이다컵바꾸기 { class Program { static void Main(string[] args) { // 빨간 컵과 파란 컵에 칠성사이다와 스프라이트가 담겨져 있다. string 빨간컵 = "칠성사이다"; string 파란컵 = "스프라이트"; Console.WriteLine("=====바꾸기 전====="); Console.WriteLine("빨간컵 : {0}", 빨간컵); Console.WriteLine("파란컵 : {0}", 파란컵); // 새롭게 준비한 노란 컵 string 노란컵; // 스프라이트를 빨간 컵에 붓기 위해 칠성사이다를 노란컵에 붓는다. // 그 다음 파란 컵의 스프라이트를 빨간 컵에 붓는다. // 그 다음 노란 컵에 임시로 담아둔 칠성 사이다를 파란 컵에 붓는다. 노란컵 = 빨간컵; 빨간컵 = 파란컵; 파란컵 = 노란컵; Console.WriteLine("=====바꾼 후====="); Console.WriteLine("빨간컵 : {0}", 빨간컵); Console.WriteLine("파란컵 : {0}", 파란컵); } } } </source> 여담으로, 위 취소선의 답은 의외로 간단하다. 정수가 저장되어 있는 a와 b가 있을 때, a와 b를 더한 다음 a에 저장한다. 그 다음 a에서 b를 뺀 값을 b에 저장한다. 그 다음 a에서 b를 뺀 값을 a에 저장하면 된다. <del>숫자가 아니고 객체면?</del> <del>[[우린 안될 거야 아마|포인터 주소값을 더하고 빼면... ...]]</del> 사실 덧셈보다 더 빠른 방법은 XOR 회로를 사용하는법이 있다. 값이 같지 않으면 a=a^b b=a^b a=a^b를 넣어두면 정수가 아니더라도, 산술적 연산이 아니라 비트 배열 자체가 바뀌기 때문에 값이 교환된다.<s>하지만 병렬 프로그래밍에서는 무리DA☆ZE★</s> == 알고리즘의 시간 복잡도 == 어떤 알고리즘이 실행될 때에 입력과 알고리즘의 실행 시간의 함수 관계를 의미한다. 입력에 따라 알고리즘의 속도가 차이가 난다. 입력되는 숫자의 정렬 작업을 하는 알고리즘 a와 b가 있다고 할 때, 숫자의 개수 등에 따라서 a가 b보다 더 빠르게 정렬 작업을 끝마칠 수도 있고 b가 a보다 더 빠르게 정렬 작업을 끝마칠 수도 있다는 의미이다. 이러한 속도는 알고리즘의 계산 횟수에 따라 달라지는데, 이를 정확히 측정하는 것은 매우 어렵다. 그러므로 보통 이를 나타내는데는 [[Big O 표기법]]으로 대략의 시간을 표시한다. 입력된 자료의 수가 <math>n</math>일 때 계산 횟수가 <math>3n+4</math>이면 <math>O(n)</math>, <math>2n^3+n^2</math>면 <math>O(n^3)</math>등으로 나타내는 방식. 이 시간 복잡도가 <math>O(2^n)</math>이런 모습이나, <math>O(n!)</math>이런 모습으로 나오면 풀이시간에 답이 없어진다. 예를 들어 소수와 소수의 곱을 [[소인수 분해]]하는 것이다. 77같이 작은 수는 7 * 11로 쉽게 할 수 있지만, 4,951,760,154,835,678,088,235,319,297를 소인수 분해하라고 하면 일단 좌절한다. <del>[[엔리코 푸치|이럴 때는 마음을 안정시키고 소수를 세는거다]]</del> 여담으로 답은 2,305,843,009,213,693,951 * 2,147,483,647이다. 하지만 반대로 답이 2,305,843,009,213,693,951 * 2,147,483,647 확인하는 것은 쉽다. 이에 관한 것은 [[P-NP 문제]] 참고. == 알고리즘의 정당성 증명 == == 알고리즘을 설계하는 일반적인 방법 == == 플로우 차트 == === 기호 === == 자료구조 == === 선형 자료구조 === ==== 선형 랜덤 접근 가능 ==== ===== 배열 ===== ===== 스택 ===== ===== 큐 ===== ===== 데크 ===== ==== 선형 랜덤 접근 불가능 ==== === 비선형 자료구조 === === 문자열 === == 분할 정복 == == 동적 계획법 == == 정렬 알고리즘 == 크기순, 사전순과 같이 정렬하는 알고리즘을 말한다. === 안정 정렬 === 비교한 값이 같을 때 서로 바뀌지 않는 정렬법을 안정 정렬이라고 한다. ==== 거품 정렬 ==== === 불안정 정렬 === 비교한 값이 같을 때 서로 바뀌는 정렬법을 불안정 정렬이라고 한다. ==== 선택 정렬 ==== ==== 퀵(Quick) 정렬 ==== == 탐욕법 == == 조합 탐색 == == 최적화 문제를 결정 문제로 전환하기 == == 수치해석 == == 정수론 == == 계산 기하 == == 트리 == === 구현과 순회 === === 이진 검색 트리 === === 힙 === === 구간 트리 === === 트라이 === == 그래프 == === 깊이 우선 탐색 === === 너비 우선 탐색 === === 최단 경로 === === 최소 스패닝 트리 === === 네트워크 플로우 === [[추가바람]] {{각주}} {{쉽게 배우는 프로그래밍 입문}} 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:-- (원본 보기) (준보호됨)틀:YouTube (원본 보기) (준보호됨)틀:YouTube/styles.css (편집) 틀:Youtube (편집) 틀:ㅊ (원본 보기) (준보호됨)틀:각주 (원본 보기) (준보호됨)틀:고지 상자 (원본 보기) (보호됨)틀:쉽게 알 수 있다 시리즈 (편집) 틀:인용문2 (원본 보기) (준보호됨)틀:취소선 (원본 보기) (준보호됨)틀:탭 (원본 보기) (준보호됨)틀:탭/styles.css (편집) 이 문서는 다음의 숨은 분류 1개에 속해 있습니다: 분류:유튜브 영상이 포함된 문서