728x90

완전 탐색(Exhaustive Search)이란?

  • 문제의 해법으로 생각할 수 있는 모든 경우의 수를 나열해보고 확인하는 기법
    1. Brute-force 혹은 Generate-and-Test 기법이라고도 불린다.
    2. 모든 경우의 수를 테스트한 후 , 최종 해법을 도출한다.
    3. 일반적으로 경우의 수가 상대적으로 작을 때 유용하다.
    4. 모든 경우의 수를 생성하고 테스트하기 때문에 수행 속도는 느리지만, 해답을 찾아내지 못할 확률이 작다.
    5. 주어진 문제를 풀 때, 우선 완전 탐색으로 접근하여 해답을 도출한 후, 성능 개선을 위해 다른 알고리즘을 사용하고 해답을 확인하는 것이 바람직하다.

Baby-gin Game

1 2 3 4 5 6 7 8 9

0~9 사이의 숫자 카드에서 임의의 카드 6장을 뽑았을때, 3장의 카드가 연속적인 번호를 갖으면 run이라 하고,

3장의 카드가 동일한 번호를 갖으면 triplete이라고 한다.

이때, 6장의 카드가 run과 triplete로만 구성된 경우를 Baby-gin으로 부른다.

 

입력 예시

667767 → 두 개의 triplete(666,777)이므로 Baby-gin
054060 → 한 개의 run(456)과 한 개의 triplete(000)이므로 Baby-gin
101123 → 한 개의 triplete(111)이 존재하지만, 023이 run이나 triplete이 아니므로 Baby-gin이 아니다

 

6자리의 숫자를 입력 받아 Baby-gin 여부 찾기

  1. 고려할 수 있는 모든 경우의 수 생성
    6개의 숫자로 만들 수 있는 모든 숫자를 나열한다.(중복 포함)
  2. 해답 테스트
    앞의 3자리와 뒤의 3자리를 잘라, run과 triplete의 여부를 테스트하여 Baby-gin을 판단한다.

 

순열이란?

  • 서로 다른 것들 중 몇개를 뽑아서 한 줄로 나열하는 것

1. 서로 다른 n개 중 r개를 택하는 순열은 아래와 같이 표현

nPr

 

2. nPr은 다음과 같은 식이 성립

nPr = n * (n-1) * (n-2) *  .... * (n-r+1)

 

3. nPn = n! 이라고 표기하며 팩토리얼(Factorial)이라 부름

n! = n * (n-1) * (n-2) *  .... *  2 * 1
728x90

'알고리즘' 카테고리의 다른 글

[알고리즘]배열(Array)이란?  (0) 2022.06.24
[알고리즘]알고리즘(Algorithm)이란?  (0) 2022.06.24
728x90

배열(Array)이란?

  • 일정한 자료형의 변수들을 하나의 이름으로 열거하여 사용하는 자료구조
    Array를  사용하면 하나의 선언을 통해서 둘 이상의 변수를 선언할 수 있다.

 

1차원 배열

1차원 배열의 선언

자료형 : 배열을 이루는 원소(변수)의 자료형

이름 : 프로그램에서 사용할 배열의 이름

길이 : 배열을 이루는 원소의 수

 

1차원 배열 선언의 예

1차원 배열의 접근

Arr[0] = 10; // ' Array(배열) Arr의 0번째 원소에 10을 저장하라' 라고 해석된다.

이때, 원소위치를 인덱스라고 하고, 인덱스는 0부터 시작한다.

따라서 0번째 원소위치라 함은 첫 번째 원소를 말한다.

728x90
728x90

알고리즘(Algorithm)이란?

 

알고리즘은 유한한 단계를 통해 문제를 해결하기 위한 절차나 방법을 말한다.

  1. 주로 컴퓨터 용어로 쓰이며, 컴퓨터가 어떤 일을 수행하기 위한 단계적 방법
  2. 어떠한 문제를 해결하기 위한 절차

 

알고리즘 표현법

 

  • 슈도 코드

 

슈도 코드는 특정 프로그래밍 언어의 문법을 따라 쓰인 것이 아니라, 일반적인 언어로 코드를 흉내 내어 알고리즘을 써 놓은 코드이다.

의사 코드로 흉내만 내는 코드이기 때문에 실제적은 프로그래밍 언어로 작성된 코드처럼 컴퓨터에서 실행할 수 없다.

특정 언어로 프로그램을 작성하기 전에 알고리즘의 모델을 대략적으로 모델링하는 데에 쓰인다.

 

  • 순서도

 

 

순서도는 프로그램이나 작업의 진행 흐름을 순서에 따라 여러 가지 기호나 문자로 나타낸 도표이다.

흐름도, 프로그램의 논리적인 흐름, 데이터의 처리 과정을 표현하는 데 사용한다.

프로그램을 작성하기 전에 프로그램의 전체적인 흐름과 과정 파악을 위해 필수적으로 거쳐야 되는 작업이다.

 

 

 

 

알고리즘의 성능 분석

 

무엇이 좋은 알고리즘인가?

  1. 정확성 : 얼마나 정확하게 동작하는가?
  2. 작업량 : 얼마나 적은 연산으로 원하는 결과를 얻어내는가?
  3. 메모리 사용량 : 얼마나 적은 메모리를 사용하는가?
  4. 단순성 : 얼마나 단순한가?
  5. 최적성 : 더 이상 개선할 여지 없이 최적화되었는가?

 

알고리즘의 성능 분석 필요성

- 많은 문제에서 성능 분석의 기준으로 알고리즘의 작업량을 비교한다.

예시) 1부터 100까지의 합을 구하는 알고리즘 비교

 

시간 복잡도(Time Complexity)

- 실제 걸리는 시간을 측정 (프로그램 실행 환경에 따라 달라질 수 있음)

- 실행되는 명령문의 개수를 계산

 

빅-오(O) 표기법

- 시간 복잡도 함수 중에서 가장 큰 영향력을 주는 n에 대한 항만을 표시

- 계수(confficient)는 생략하여 표시

빅-오 표기법 예

요소 수가 증가함에 따라 알고리즘의 시간복잡도는 각기 달라진다.

프로그램을 실제로 실행시키기 전에 시간 복잡도의 개념을 통해 예측, 비교가 가능하다.

728x90

'알고리즘' 카테고리의 다른 글

[알고리즘]완전 탐색(Exhaustive Search)이란?  (0) 2022.06.24
[알고리즘]배열(Array)이란?  (0) 2022.06.24

+ Recent posts