자료구조

김재현·2022년 8월 3일
0

오프라인 특강

목록 보기
5/12
  • 알고리즘 : 문제 해결을 위해 정해진 일련의 절차.
    순서와 절차가 있으면 알고리즘이라 할 수 있다.
  • 자료구조 : 데이터 값의 모임, 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령.
    데이터를 구조화시키는 절차. 알고리즘을 적용시키기 위한 과정.

코딩테스트

  • 직원 등을 선발하기 위한 목적으로 시행되는 일종의 문제 풀이 시험.
    공개 채용능력에서 응시자의 수를 효과적으로 줄이기 위한 방법.
    컴퓨팅 사고력. 현실세계의 다양한 문제를 어떻게 컴퓨터로 해결할 수 있는지.
    결국 문제해결 능력.

문제를 푸는 방법

  1. 문제를 이해한다.
  2. 어떻게 풀지 계획을 세운다.
  3. 계획을 수행해서 문제를 해결한다.
  4. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

좀더 세분화

  1. 문제를 이해한다.
  2. 문제를 내가 익숙한 용어로 재정의한다.
  3. 어떻게 풀지 계획을 세운다.
  4. 계획을 검증한다.
  5. 프로그램으로 구현한다.
  6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

1. 문제를 읽고 이해하기

문제의 설명을 공격적으로 읽으며, 문제가 원하는 바를 완전히 이해하는 과정이 필요.
문제의 궁극적인 목적을 옳게 이해하더라도 사소한 제약 조건을 잘못 이해하면 풀 수 없는 문제가 있음.
문제에 답이 있다!

2. 재정의와 추상화

자신이 다루기 쉬운 개념을 이용, 문제를 자신의 언어로 풀어쓴다.
문제가 요구하는 바를 직접적으로 이해하기 위해 꼭 필요. 요구하는 바가 복잡한 문제일수록 중요성이 큼.
추상화란 현실세계의 개념을 다루기 쉬운 개념으로 옮겨 표현하는 것.
문제의 본질을 어떤 방식으로 재구성하는냐에 따라 같은 일을 수행하는 프로그램이라도 전혀 다른 문제로 받아들여질 수 있다.
어떤 부분을 추상화할 것인지를 선택하는 작업과 문제를 재정의하는 방법들에 대한 괄은 프로그래머의 영역.

3. 계획 세우기

문제를 어떤 방식으로 해결할지 결정하고, 사용할 알고리즘과 자료구조 선택.

4. 계획 검증

우리가 설계한 알고리즘이 모든 경우에 요구 조건을 정확히 수행하는지 증명.
수행에 걸리는 시간과 사용 메모리의 문제가 제한 내에 들어가는지 확인.

5. 계획 수행

계획을 잘 세워도 프로그램의 구현이 부정확하거나 비효율적이라면 프로그램은 정확히 동작하지 않음.

6. 회고

문제 해결에 당장 직접적인 영향은 없지만, 장기적으로 가장 큰 영향을 미침.
자신이 문제를 해결한 과정을 돌이켜보고 개선하는 과정을 말함.
효과적으로 회고를 하는 가장 좋은 방법은 무제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것.

문제의 간단한 해법과 함께 자신이 어떤 방식으로 접근했는지, 문제의 해법을 찾는데 결정적이었던 깨달음은 무엇이었는지 기록한다.

이 과정들은 문제의 패턴화를 위함이다. 문제는 다 똑같다.

Stack

스택이란 쌓아 올린다는 것을 의미하며, 책을 쌓는 것처러 차곡차곡 쌓아 올린 형태.
후입 선출(LIFO, Last In First Out) rnwh.
top으로 정한 곳을 통해서만 접근 가능.
스택에서 top을 통해 삽입하는 연산 = push.
스택에서 top을 통해 삭제하는 연산 = pop.

Queue

큐란 줄, 혹은 줄을 서서 기다리는 것.
한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어진다.
삭제 연산만 수행되는 곳 = front
삽입 연산만 수행되는 곳 = rear
삭제 연산 = dequeue, 삽입 연산 = enqueue

0개의 댓글