ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조와 알고리즘
    Programing Language/Python 2020. 8. 10. 11:52
    반응형

    자료구조

    알고리즘


    자료구조와 알고리즘 ?

    • Programing과 Coding을 한다면 반드시 알고 있어야 하는 기본지식
    • 자료구조와 알고리즘을 모르고 코딩 테스트 문제만 푸는 것은 면접에서 탈락할 가능성이 높음
    • 수학 공식을 모른 채 기출문제만 푸는 것과 같음 

     

    Programing language

    • 다양한 결과값을 만들기 위해서 여러 가지 명령어들을 모아 놓은 언어
    • 컴퓨터 프로그래밍에서 어떠한 알고리즘을 구현하기 위해서 쓰이는 언어
    • HTML(mark up language) and CSS(style sheet language)는 프로그래밍 언어가 아님

     

    자료구조와 알고리즘의 이해가 필요한 이유?

    자료구조와 알고리즘을 알고 프로그래밍을 한다면?

    만들고자 하는 프로그램 또는 구현하고자 하는 기능을 보다 쉽고 효율적으로 만들 수 있음

    프로그램을 만들 때 자료구조와 알고리즘을 기본적으로 알고 있어야 함

     

    자료구조와 알고리즘 공부는 취업을 위한 코딩테스트 연습인가?

    No

    단지 자료구조와 알고리즘을 모르고 코딩 테스트를 공부하는 것은

    수학의 원리를 모르고 실전 문제집을 사서 기출문제를 푸는 연습하는 것이랑 같음

     

    현업에서는 코딩테스트 문제를 푸는 일은 거의 없음

    언어, 프레임워크 또는 라이브러리에서 이미 잘 만들어진 친구들을 데려와서 기능에 맞게 가장 적합하고 효과적인 기능들을 가져와서 쓰는 경우가 대부분

     

    그렇다면 코딩테스트 면접을 보는 이유?

    정확하고 효율적으로 코드를 작성했는지 채점

    알고리즘 작성 다음 질의응답을 통해서 자료구조와 알고리즘에 대한 이해도, 시간과 공간 복잡도에 대한 이해도를 확인하기 위한 작업

     

    ex) A, B, C 알고리즘도 있는데, 왜 D알고리즘을 선택했나요? 장점과 단점은 무엇인가요?

    ex) map이란 자료구조를 사용했는데, set을 쓰지 않고 map을 쓴 이유는 무엇인가요? 

     

    -> 대답을 하지 못하면 불합격... 이겠죠?

     

    자료구조 and 알고리즘 공부하는 방법 

    1. 자료구조와 알고리즘에 대한 전반적인 이해
    2. 코딩 테스트 문제 푸는 연습

    1. 자료구조와 알고리즘 대한 전반적인 이해

    자료구조란?

    • 서비스나 어플리케이션에서 필요한 데이터를 메모리에 어떻게 구조적으로 잘 정리해서 담아두고 관리하고 최종적으로 가장 표율적인 방식
    • 필요한 데이터에 빠르게 접근하고 필요한 수정, 삽입, 삭제할 수 있도록 도와줌

    효율적인 일 처리

    서비스에서 클라이언트에게 데이터를 제공하거나 어플리케이션에서 사용자에게 필요한 데이터를 보여 주거나 수정할 때 효율적으로 일을 처리하기 위해서는 기능에 적합한 알고리즘과 자료구조를 쓰는 것이 정말 중요함

    어떤 자료구조를 쓰냐에 따라서 사용자가 원하는 기능을 수행하는데 0.2초가 거릴 수도 2초가 걸릴 수도 있음

     

    자료 구조 종류는 굉장히 다양함

    대표적으로 배열, 단일 연결리스트, 이중 연결 리스트, 스택, 해쉬 테이블 이런 친구들이 있음

     

    자료구조 공부 Point

    공부할 때 아래의 위주로 생각하면서 공부하기 

     

    자료구조 안에 있는

    데이터들의 순서가 보장이 되는지

    중복된 데이터가 들어갈 수 있는지

    검색할 때 얼마나 효율적인지

    기능에 따라서 수정할 때 얼마나 효율적인지

     

    Algorithm란?

    제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지를 정해놓은 로직

    INPUT X -> function -> OUTPUT Y=f(X)

    주어진 데이터를 검색하거나 정렬 또는 총점을 구하는 등의 다양한 계산을 하는 것을 의미

     

    알고리즘 공부는 Big O를 잘 이해하는 것과 관련 있음

     

    Big O란?

    동일한 알고리즘의 로직으로 인풋의 사이즈가 점점 커질수록, 시간이 얼마나 더 걸리느냐를 정의한 시간 복잡도를 나타내는 표기할 수 있는 방법

     

    알고리즘 공부 Point!

    INPUT의 사이즈가 커질수록

    Big O가 어떻게 변화하는지

    공간과 시간 복잡도는 어떤지

    어떤 자료 구조를 이용해서 어떤 알고리즘을 쓰는 게 좋은지 등

     

    좋은 알고리즘이란?

    제공된 데이터를 정말 작은 공간과 빠른 시간 안에서 효율적으로 처리할 수 있는 것이 좋음

     

    자료구조와 알고리즘 공부 첫 단계

    쉬운 자료구조와 알고리즘 책을 한 권을 열심히 공부하기

    ex) 파이썬 알고리즘 인터뷰

     

    이 자료구조는 어느 사항에 쓰이는 것인지

    어떤 식의 API들이 있는지

    조금 큰 그림을 보면서 공부하기

    가능하다면 구현하는 수준까지 공부하기

     

    자료구조와 알고리즘 공부는

    만들고자 하는 프로그램을 더 멋지고 효율적으로 만들어 줄 수 있는 좋은 수단일 뿐 

    현재 하고 있는 공부 하는 전문분야와 병렬적으로 공부할 수 있도록!

     

     

    2. 코딩 테스트 문제 푸는 연습

    해커랭크, 프로그래머스, 릿코드 등 다양한 사이트에서 꾸준히 하루에 3~5개씩 풀기

     

     

     

    이 글은 드림코딩의 엘리님의 영상을 보고 공부하였습니다.

    반응형

    댓글

Designed by Tistory.