What I Learned

이번 주에는 자료구조의 개요, 알고리즘의 기본 조건과 표현 방법, 그리고 데이터 타입과 추상 자료형의 의미를 파이썬 실습과 함께 학습했다.

1) 자료구조란 무엇인가

  • 자료구조는 컴퓨터에서 데이터를 정리하고 조직화하는 다양한 방식이다.
  • 데이터를 어떤 형태로 저장하고 다룰지에 따라 프로그램의 설계와 처리 효율이 달라진다.
  • 따라서 문제의 특성에 맞는 자료구조를 선택하는 것이 중요하다.

2) 자료구조의 분류

분류 설명 예시
선형 자료구조 데이터를 순서대로 나열하여 저장 리스트, 스택, 큐
비선형 자료구조 데이터 사이의 연결 관계가 더 복잡함 트리, 그래프

선형 자료구조는 순차적인 흐름을 다루는 데 적합하고, 비선형 자료구조는 계층 구조나 복잡한 연결 구조를 표현하는 데 적합하다.

3) 주요 자료구조 예시

  1. 리스트: 여러 데이터를 순서대로 저장하는 가장 기본적인 구조
  2. 스택: 나중에 들어온 데이터를 먼저 꺼내는 구조
  3. 큐: 먼저 들어온 데이터를 먼저 꺼내는 구조
  4. 트리: 회사 조직도나 컴퓨터 폴더처럼 계층 구조를 표현하는 구조
  5. 그래프: 노드 간의 복잡한 연결 관계를 표현하는 구조

4) 자료구조와 알고리즘의 관계

프로그램 = 자료구조 + 알고리즘

  • 자료구조 = ‘데이터를 저장하는 방식’
  • 알고리즘 = ‘데이터를 처리하는 절차와 방법’
  • 즉, 프로그램은 무엇을 저장할지그 데이터를 어떻게 처리할지의 결합으로 설계된다.

5) 알고리즘의 조건

조건 의미
입력 0개 이상의 입력이 존재해야 함
출력 1개 이상의 출력이 존재해야 함
명백성 각 명령의 의미가 모호하지 않고 명확해야 함
유한성 한정된 단계 이후 반드시 종료되어야 함
유효성 각 명령이 실제로 실행 가능한 연산이어야 함

6) 알고리즘을 기술하는 방법

  1. 자연어
    • 사람이 읽기 쉽다.
    • 정의가 불명확하면 의미가 모호해질 수 있다.
  2. 흐름도(flowchart)
    • 직관적이고 전체 흐름을 파악하기 쉽다.
    • 알고리즘이 복잡해질수록 흐름도도 복잡해진다.
  3. 의사코드(pseudocode)
    • 구현 세부사항을 감추고 핵심 논리에 집중할 수 있다.
    • 실제 프로그래밍 언어로 옮기는 과정에서 추가 해석이 필요할 수 있다.
  4. 특정 프로그래밍 언어
    • 실제 구현과 실행을 바로 다룰 수 있다.
    • 구현 세부사항이 알고리즘의 핵심 이해를 방해할 수 있다.

7) 데이터의 종류(Data Type)

  • 수치 데이터: 정수, 실수, 복소수 등
  • 문자 데이터: 영문자, ASCII, 한글 코드, 유니코드 등
  • 논리 데이터: True, False
  • 자료형에 따라 저장 방식과 처리 방식이 달라진다.
  • 파이썬에서는 정수, 리스트, 딕셔너리 등 다양한 자료형을 제공한다.

수치 데이터의 경우 표현 방식에 따라 고정소수점과 부동소수점으로 나뉘며, 자리수와 그에 따른 리소스 사용 측면에서 차이가 발생한다.

8) 자료형과 추상 자료형(ADT)

자료형은 데이터 객체의 집합 + 연산으로 볼 수 있다.

  • 예를 들어 int 자료형은 숫자 데이터와 +, -, *, // 같은 연산을 함께 포함한다.

추상 자료형(ADT, Abstract Data Type)은 프로그래머가 추상적으로 정의한 자료형이다.

  • 다루는 데이터와 제공되는 연산을 기술한다.
  • 무엇이 있는가, 무엇을 하는가를 정의하지만, 구현 방법은 직접 포함하지 않는다.
  • 실제 동작 방식과 상세 설계는 구현 단계에서 수행한다.

Key Concepts

  • 자료구조의 정의와 역할
  • 선형 자료구조와 비선형 자료구조의 차이
  • 프로그램에서 자료구조와 알고리즘의 관계
  • 알고리즘의 필수 조건과 기술 방법
  • 데이터 타입과 추상 자료형(ADT)의 기본 개념

p.s.

각 자료구조의 실제 동작 방식은 이후 파이썬 예제와 문제 풀이를 통해 더 구체적으로 정리할 예정이다.

References

  • 강의교안(비공개)