티스토리 뷰

알고리즘

알고리즘 공부 일지 1

saedong 2023. 6. 2. 22:09

시간 복잡도 


시간 복잡도의 유형

  • 빅-오메가( Ω(n) ) : 최선일 때의 연산 횟수를 나타낸 표기법 
  • 빅-세타( Θ(n) ) : 보통일 때의 연산 횟수를 나타낸 표기법 
  • 빅-오( O(n) ) : 최악일 때의 연산 횟수를 나타낸 표기법 

 

연산 횟수 계산 방법

  • 연산 횟수 = 알고리즘 시간 복잡도 X 데이터의 크기

알고리즘 적합성 평가

ex) 데이터의 최대 크기(n)가 1,000,000 이고 시간이 2초(2억 2,000,000,000) 일때

  • 버블 정렬(n2 ,n제곱) = (1,000,000)2 = 1,000,000,000,000 > 200,000,000   ==> 부적합 알고리즘
  • 병합 정렬(nlogn) = 1,000,000log(1,000,000) = 약 2,000,000 < 200,000,000 ==> 적합 알고르짐

 

시간 복잡도 도출 기준

  1. 상수는 시간 복잡도 계산에서 제외한다.
  2. 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 된다.

 

 

디버깅


 - 자료형은 처음부터 long형으로 선언하자. (자료형 범위 오류 대부분을 예방해준다)

(팩토리얼, 경우의 수, 순열, DP에서 만약 음수가 나온다면 long인지 int인지 꼭 확인하기)

 

 

 

 

자료구조


배열과 리스트

두 자료구조의 특징을 정확하게 이해하고 문제가 요구하는 조건에 따라 적절하게 선택해 사용하는것이 중요하다

 

배열

  • 연속 공간에 값이 채워져 있는 형태의 자료구조
  • 인덱스를 통해 값에 바로 접근할 수 있다.
  • 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다.
  • 배열의 크기는 선언할 때 지정할 수 있으며, 한번 선언하면 크기를 늘리거나 줄일 수 없다.
  • 코딩테스트에서 가장 많이 사용

 

리스트

  • Head 퐁인터로부터 순서대로 접근해야한다. 접근 속도가 느리다
  • 데이터를 삽입하거나 삭제하는 연산 속도가 빠르다
  • 선언할 때 크기를 별도로 지정하지 않아도 된다. 변하기 쉬운 데이터를 다룰 때 적절하다

 


구간 합 (투 포인터 )

- 구간합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘이다.

 

합배열

S[i] = A[0] + A[1] + A[2] + ... A[i-1] + A[i] // A[0]부터 A[I]까지의 합

합배열 S를 만드는 공식 

S[I] = S[i-1] + A[i]

 

구간 합을 구하는 공식

S[ j ] - S[i -1]

 

ex) 1940, 2018

- 정렬을 해야하거나 정렬이 되서 나온다면, 90프로 투 포인터 사용

 

 

슬라이딩 윈도우 알고리즘

2개의 포인터로 범위를 지정한 다음 범위를 유지한 채로 이동하며 문제를 해결합니다.

투 포인터 알고리즘과 매우 비슷하다

 

 

 

 

스택과 큐


스택과 큐는 배열에서 발전된 형태의 자료구조입니다.

 

스택

스택은 삽입과 삭제 연산이 후입선출(LIFO)로 이뤄지는 자료구조입니다. 

스택은 깊이 우선 탐색(DFS), 백트래킹 종류의 코딩 테스트에 효과적이므로 알아두는게 좋습니다.

 

  • push : top 위치에 새로운 데이터를 삽입하는 연산
  • pop: top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산
  • peek: top 위치에 현재 있는 데이터를 단순 확인하는 연산

 

큐는 삽입과 삭제 연산이 선입선출(FIFO)로 이뤄지는 자료구조입니다. 양방향에서 삽입과 삭제가 이뤄집니다.

큐는 너비 우선 탐색(BFS)에서 자주 사용합니다

  • rear: 큐에서 가장 끝 데이터를 가리키는 영역
  • front: 큐에서 가장 앞에 데이터를 가리키는 영역
  • add: rear 부분에 새로운 데이터를 삽입하는 연산
  • poll:front 부분에 있는 데이터를 삭제하고 확인하는 연산
  • peak: 큐의 맨 앞(front)에 있는 데이터를 확인할 때 사용하는 연산 

 

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

백준 12891 Java DNA 비밀번호  (1) 2023.06.13
백준 1940 문제 Java 주몽의 명령  (0) 2023.06.12
백준 2018 Java  (2) 2023.06.09
백준 11659 문제 Java  (0) 2023.06.08
백준 11720 문제 Java  (0) 2023.06.07