이번 포스팅은 최대공약수/최소공배수를 Computer를 이용해서 구하는 방법입니다. 1. 단순탐색 컴퓨터를 사용하지 않을 경우 구했던 방법을 생각해보면 1. a와 b가 있다. 2. a = a_1*a_2*a_3...., b = b_1*b_2*b_3....의 형태로 인수분해 한다. 3. 이때 인수분해 된 값들 중 교집합을 찾는다. Prime Number를 구하는 포스팅을 참고하면, N의 숫자가 있을 때 N을 인수분해 하기 위해서는 1~1/N까지의 값으로 N을 나눤서 0이되는 값을 찾아야 합니다. 하지만 이 방법은 O(N)의 시간복잡도를 갖기 때문에, 숫자가 커질수록 알고리즘의 성능이 떨어집니다. 2. 유클리드 호제법 다른 방법으로는, 두 수의 나눗셈결과를 이용하는 유클리드호제법이 있습니다. ko.wikipe..
소수(Prime Number)는 1이외에 어떠한 값으로도 나눠지지 않는(나머지가 없는) Number를 의미합니다. 이런 소수는 암호악에서 주로 사용되며, 매우 큰 Number가 소수인지 소수가 아니면 어떻 값과 곱해지는지를 사용하는 방법이 사용됩니다.(공개키 암호) 컴퓨터가 해당 Number가 소수인지, 소수가 아니면 어떤 값과 곱해지는지 확인하는 방법은 1. 1~Number까지 나눠서, 나눈 나머지를 확인한다 1_1. 만약 나머지가 0이면 1 이외에 나눠지는 값이 있으므로, 소수가 아님 2. Number의 1/2까지 진행 후 알고리즘 종료 Number의 1/2를 넘어가면, 어차피 Number를 나눠도 1보다 작아지기 때문에 의미가 없습니다. 이렇게 되면 O(1/2N) = O(N)의 시간복잡도를 갖는 P..
이번 포스팅은 컴퓨터가 어떻게 사칙연산을 처리한는지에 대한 포스팅 입니다. 사칙연산 식을 표현할때는 3가지가 있다고 할 수 있습니다. 1.전위표기 2.중위표기 3.후위표기 자 그러면 이제 이런 표기법이 왜 필요한지 의문이 드실겁니다. 우리가 Programming 언어로 Code를 짜고, 해당 Code를 기반으로 Computer가 동작합니다. 사람은 중위 표기법을 바로 이해할 수 있지만 컴퓨터가 중위표기법을 순서대로 해석할 경우 문제가 발생합니다. 사람의 경우 /와 *가 +, -보다 우선순위인걸 알기 때문에 식 전체를 보고, 우선순위부터 계산합니다. 하지만 컴퓨터가 중위표기법 그대로를 받는다면 순서대로 들어온 operand를 계산하기 때문에 실제 필요한 결과와는 다른 값이 나오는것을 확보실 수 있습니다. ..
이번포스팅은 간단한 알고리즘 입니다. 정보처리기사나, 다른 알고리즘 관련된 내용을 공부하시다보면 특수한 형태를 Display 해라(Ex. 삼각형, 나무, Tree모양....)라는 문제가 가끔 등장합니다. 이번 형태는 HourGlass(모래시계) 모양 입니다. 저도 예전 C언어 과제를 하면서, 이걸 못만들어서 엄청 고생했던 기억이 있네요 ㅎㅎ 만들어 지는 과정은. 1. HourGlass 크기만큼의 Frame을 생성한다. 2. 첫번째 Row를 가득 채우로, 그 다음 Row부터 양쪽을 1씩 좁혀나간다. 3. Row를 채워야할 값이 0보다 작거나 같아지면 다시 좌우의 양쪽을 1씩 넓히면서 Fill Python으로 간단하게 구현한 HourGlass 형태의 결과물 만들기입니다~ import random class ..
이전 포스팅에서 단순한 방법으로 Distinct Value List를 구하는 방법에 대해서 알아보았습니다. 이번에는 보다 빠른 속도로 Distinct Value List를 구하는 방법으로, Hash 탐색을 이용하는 방법입니다. Hash 탐색방법은 이름 에서 알 수 있듯, Hash 알고리즘을 활용합니다. teus-kiwiee.tistory.com/32?category=913862 Hash Hash는 값을 입력받아 해당 값에서 특정 값을 추출하고, 추출한 값을 Index로 하는 Hash Table을 만드는 구조입니다. 이때 Hash Fucntion으로는 다양한 방법이 존재하며, 다양한 값에서 균등한 Hash Code가 teus-kiwiee.tistory.com Hash탐색을 활용 할 경우, Distinct ..
이번 포스팅은 주어진 Data에서 Distinct Value로 구성된 List를 구하는 알고리즘 입니다. 현재 가장 유명한 방법은 Hesh Map을 사용하는 방법이지만, 해당 방법 이전에 Brutal Algorithm 방법으로 구하는 Distinct Value를 구하는 방법에 대해서 알아보겠습니다. 해당 알고리즘은. 1. Random List에서 N번째 원소를 Pick한다 2. N번째 원소가 Distinct List에 있는지 확인한다. 3. 있으면 Pass하고, 없으면 Distinct List에 추가한다. 4. 모든 Random List의 원소를 확인할 때까지 1~3반복 알고리즘이 너무 직관적이라, 특별히 설명이 필요 없어보입니다 ^_^;; 해당 알고리즘은 n개의 Element에 대해서, k번(disti..
- Total
- Today
- Yesterday
- 분할정복
- Sort알고리즘
- 프로그래머스
- 알고리즘
- C++
- stack
- 완전탐색 알고리즘
- 병렬처리
- Greedy알고리즘
- AVX
- heap
- Python
- git
- 사칙연산
- 이분탐색
- 코딩테스트
- GDC
- 자료구조
- 동적계획법
- hash
- 컴퓨터그래픽스
- SIMD
- Search알고리즘
- prime number
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |