알고리즘

💡 분할정복(Divide-and-Conquer) - 해결하기 쉽도록 문제를 여러개의 작은 부분으로 나누고 나눈 문제를 각각 해결하는 방식(하양식 방식, top-down) 💡 이진검색 - 찾고자 하는 원소 x 와 정렬된 배열에서 배열의 중간에 위치한 항목과 일치한지 비교 - 일치하지 않을 경우, x가 중앙보다 작으면 왼쪽, 크면 오른쪽 반쪽을 선택해 다시 해당 반쪽의 중앙을 선택 (반쪽 배열에서 재귀적으로 이분 검색) //이진검색 알고리즘 ✔ 최악의 경우 시간복잡도 분석 - n이 2의 제곱일 때와 아닐때로 나눌 수 있지만 자세한 설명은 생략하고 W(n) = ⌊logn⌋ +1 *n이 크면 1은 무시 - 귀납적 증명
💡알고리즘 이란? - 주어진 문제를 논리적으로 해결하는 과정 - 분석을 통해 효율성 파악, 효율성을 정량화 - 알고리즘은 프로그래밍 언어에 독립적 (언어에 따라 구현 문법은 좀 다르겠지만 원리는 동일하게 동작) ✔알고리즘의 따라 효율이 달라질 수 있다? 예1) 순차검색 vs 이진검색 - 순차검색은 처음부터 찾고자 하는 원소가 나올 때까지 진행 -> 원소가 가장 마지막에 있으면 시간 오래 걸림 - 이진검색은 중간에 있는 원소부터 시작해 찾고자 하는 원소보다 큰지 작은지에 따라 오,왼으로 이동해 다시 중간 원소와 비교 -> 비교적 시간 단축 예2) 피보나치항 계산의 재귀 vs 반복 - 반복문을 사용해 계산된 항의 개수는 n+1 - 재귀함수를 사용해 계산된 항의 개수는 2^(n/2) (단, n>=2) ex) ..
https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net ✔ 알고리즘 구현 문자열 ✔ 접근방법 1. 특정 문자가 나올 때까지 반복 하므로 while문 사용 2. 첫번째 인덱스, 마지막 인덱스를 시작으로 인덱스를 1씩 이동해주며 비교 인덱스가 같아지거나(인덱스가 홀수개), 역순으로 바뀌면(인덱스가 짝수개) yes로 검사 종료 3. 계속 런타임 에러가 나서 봤더니 논리연산자를 | 를 쓴 것이 문제 💡 논리연산자는 and / or 로 써줘야 함 (|, & 는 파이참에서는 에..
https://www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net ✔ 알고리즘 수학 구현 조합론 ✔ 접근방법 1. 이항계수의 분자 : N부터 1씩 뺀 숫자를 K개 곱함 , 분모 : K부터 1씩 뺀 숫자를 K개 곱함 반복문으로 K번 반복하며 숫자에 -1를 반영해주려고 함 처음에는 분자, 분모를 각각 곱해주고 마지막에 나눠주는 것이 아니라 result *= ((N-i)/(K-i)) 형태로 그때그때 값을 나눠준 값을 곱해주려고 했다 ex) 5C3 = (5/3) * (4/2) * (3/1) 그런데 이렇게 했더니 자꾸 틀려서 값을 여러개 찍어봤더..
gangmini
'알고리즘' 카테고리의 글 목록 (4 Page)