Skip to content

movingone/algorithm_study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

알고리즘 문제타입 별 개념 정리

1장 그리디

  • 이론
    • 당장 좋은 것, 눈앞에 보이는 것만 선택하는 그리디
    • 항상 최적의 결과를 도출하는 건 아니지만 어느정도 최적의 해에 근사한 값을 빠르게 구할 수 있다.
    • 또한 ‘특정한 상황’에 있어서 그리디 알고리즘이 최적의 해를 보장할 수도 있다. (언제나 그리디 알고리즘 조건을 충분히 만족하는지 검증해야 한다)
    • 거스름돈 문제: C++ 코드 / Java 코드)
  • 실전
    • 동빈이의 큰 수의 법칙: C++ 코드 / Java 코드)

      동빈이의 큰수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰수를 만드는 방법이다. 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다.

    • 숫자 카드게임: C++ 코드 / Java 코드)

      숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. https://www.acmicpc.net/problem/10815

    • 1이 될 때까지: C++ 코드 / Java 코드)

      어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다.

but 최적의 해를 보장하지 못하는 경우가 더 많아 다이나믹 프로그래밍(Dynamic Programming)등의 기타 알고리즘 기법을 적용해야 하기도 한다.

4장 구현

5장 DFS/BFS

6장 정렬

  • 이론
    • 기준에 따라서 데이터를 정렬 정렬표 이후에 차근차근 구현해보겠지만, 각 알고리즘마다 최상과 평균 시간복잡도와 안정성은 어느정도 알고있는 것이 좋다.

      (참고로 Shell Sort의 경우 /가 나눗셈을 의미하는게 아니라 갭 시퀀스(gap sequence)에 따라 시간복잡도가 달라진다. 그래서 'gap sequence가 좋은 경우' / 'gap sequence가 나쁜 경우' 이렇게 보면 된다. 자세한 내용은 shell sort를 다룰 때 말해드리겠다.)

    • 선택 정렬: (C++ 코드 / Java 코드)

      n ( n + 1) / 2. [+1, /2 과 같은작은 연산은 빼고 계산한다]

      선택 정렬의 시간 복잡도는 **O(n^2) 이다

    • 버블 정렬: C++ 코드 / Java 코드)

      삽입정렬이나 선택정렬과 같은 O(N2) 의 시간복잡도를 갖는다 하더라도 거품정렬의 교환횟수가 평균적으로 더 많기 때문에 실질적으로는 삽입, 선택 정렬보다 더 많은 시간이 걸린다

      만약 여러분이 정렬 알고리즘에서 거품정렬을 배울 때 이렇게 swap에 대한 flag변수를 두지 않는다면, 최선의 경우에도 O(N2)의 시간 복잡도를 갖기 때문에 반드시 확인해보는 것이 좋다.

      버블 정렬의 시간 복잡도는 **O(N^2) 이다

    • 스와프(Swap): (C++ 코드 / Java 코드)

    • 삽입 정렬: (C++ 코드 / Java 코드)

      삽입 정렬은 데이터를 '비교'하면서 찾기 때문에 '비교 정렬' 이며 정렬의 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 '제자리 정렬(in-place sort)' 이기도 하다.

      정확히는 데이터를 서로 교환하는 과정(swap)에서 임시 변수를 필요로 하나, 이는 충분히 무시할 만큼 적은 양이기 때문에 제자리 정렬로 보는 것

      시간 복잡도 O(N^2) 실제로는 삽입정렬이 연산이 가장 적게 일어남. 거의 정렬된 상태에서는 어떤 알고리즘보다도 빠르다

    • 퀵 정렬: ( C++ 코드 / Java 코드)

      평균 시간 시간복잡도 O(N * log N), 최악 시간 복잡도 O(N^2) → 이미 정렬이 거의 되어 있는 경우

    • 기수 정렬

      정렬 알고리즘의 한계 O(n log n)을 넘어설수 있는 알고리즘. but 적용할 수 있는 범위가 제한적이다. 범위는 데이터의 길이에 의존함, 정렬하고자 하는 데이터의 길이가 동일하지 않은 데이터는 정렬 불가(기존 정렬 알고리즘에 비해 기수 정렬 알고리즘은 좋은 성능 내는것이 불가능하단 말)

      LSD방식(덜 중요한 숫자부터 정렬하는 방식) 주로 이 방식을 이야기 함, MSD방식 ( 중요한 숫자부터 정렬) 정렬이 끝나야 결과확인 가능, 정렬이 완료되었는지 확인하는 과정이 필요해 메모리를 더 사용하게 된다. 시간 복잡도 O(n)

    • 계수 정렬(카운팅 정렬): (C++ 코드 / Java 코드)

      최대값에 해당하는 값을 size로 하는 임시 배열, 정렬하고자 하는 값들이 몇 개씩인지 파악하는 임시 배열을 만들고 그 배열을 기준으로 정렬함. index부터 시작하여 누적된 값으로 배열을 변경. 여기서의 index가 정렬하고자 하는 value가 되고 value는 정렬되었을 때의 index가 된다. 시간복잡도 O(n)

    • 정렬 라이브러리 기본 예제: (C++ 코드 / Java 코드)

    • 정렬 라이브러리 키(Key) 기준 정렬 예제: (C++ 코드 / Java 코드)

  • 실전

7장 이진 탐색

8장 다이나믹 프로그래밍

9장 최단 경로

10장 기타 그래프 이론

Part 3 알고리즘 유형별 기출문제

11장 그리디

12장 구현

13장 DFS/BFS

14장 정렬

15장 이진 탐색

16장 다이나믹 프로그래밍

17장 최단 경로

18장 기타 그래프 이론

19장 2020년 상반기 삼성전자 기출문제

Part 4 부록

부록 A 코딩 테스트를 위한 파이썬 문법

  • 자료형
    • 수 자료형
      • 정수형
      • 실수형
      • 수 자료형의 연산
    • 리스트 자료형
      • 리스트 만들기
      • 리스트 인덱싱
      • 리스트 슬라이싱
      • 리스트 컴프리헨션
      • 리스트 관련 메서드
    • 문자열 자료형
      • 문자열 초기화
      • 문자열 연산
    • 튜플 자료형
      • 튜플 초기화
    • 사전 자료형
      • 사전 자료형 초기화
      • 사전에서 키로 검색
      • 사전 자료형 관련 메서드
    • 집합 자료형
      • 집합 초기화
      • 집합 연산
      • 집합 관련 메서드
  • 조건문
    • 조건문 예시 1
    • 조건문 예시 2
    • 조건문 예시 3
    • pass 키워드 사용 예시
    • 조건문 한 줄에 쓰기
    • 조건부 표현식
  • 반복문
    • while 문법
      • while 문법 예시 1
      • while 문법 예시 2
    • for 문법
      • for 문법 예시 1
      • for 문법 예시 2
      • for 문법 예시 3
      • for 문법 예시 4
  • 함수
    • 더하기 함수
    • global 키워드 사용 예시
  • 입출력
    • 코딩 테스트에서 입력을 위한 전형적인 코드
    • 공백을 기준으로 적은 수의 데이터 입력
    • readline()으로 빠르게 입력 받기
    • f-string 사용 예시
  • 주요 라이브러리의 문법과 유의점
    • 내장 함수
    • itertools
    • heapq
    • bisect
    • collections
    • math
  • 자신만의 알고리즘 노트 만들기

부록 B 기타 알고리즘

부록 C 개발형 코딩 테스트

  • 서버와 클라이언트
  • REST API
  • JSON
  • API 호출 실습
    • API 호출 실습 1
    • API 호출 실습 2
    • 회원 정보 처리 실습

부록 D 알고리즘 유형별 문제 풀이

추가 보충 자료

책에서는 자세히 다루지 않지만 독자의 요청으로 추가적으로 제공합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published