자료구조와 문제해결 정리-1
What I Learned
이번 주에는 자료구조의 개요, 알고리즘의 기본 조건과 표현 방법, 그리고 데이터 타입과 추상 자료형의 의미를 파이썬 실습과 함께 학습했다.
1) 자료구조란 무엇인가
- 자료구조는 컴퓨터에서 데이터를 정리하고 조직화하는 다양한 방식이다.
- 데이터를 어떤 형태로 저장하고 다룰지에 따라 프로그램의 설계와 처리 효율이 달라진다.
- 따라서 문제의 특성에 맞는 자료구조를 선택하는 것이 중요하다.
2) 자료구조의 분류
| 분류 | 설명 | 예시 |
|---|---|---|
| 선형 자료구조 | 데이터를 순서대로 나열하여 저장 | 리스트, 스택, 큐 |
| 비선형 자료구조 | 데이터 사이의 연결 관계가 더 복잡함 | 트리, 그래프 |
선형 자료구조는 순차적인 흐름을 다루는 데 적합하고, 비선형 자료구조는 계층 구조나 복잡한 연결 구조를 표현하는 데 적합하다.
3) 주요 자료구조 예시
- 리스트: 여러 데이터를 순서대로 저장하는 가장 기본적인 구조
- 스택: 나중에 들어온 데이터를 먼저 꺼내는 구조
- 큐: 먼저 들어온 데이터를 먼저 꺼내는 구조
- 트리: 회사 조직도나 컴퓨터 폴더처럼 계층 구조를 표현하는 구조
- 그래프: 노드 간의 복잡한 연결 관계를 표현하는 구조
4) 자료구조와 알고리즘의 관계
프로그램 = 자료구조 + 알고리즘
- 자료구조 = ‘데이터를 저장하는 방식’
- 알고리즘 = ‘데이터를 처리하는 절차와 방법’
- 즉, 프로그램은
무엇을 저장할지와그 데이터를 어떻게 처리할지의 결합으로 설계된다.
5) 알고리즘의 조건
| 조건 | 의미 |
|---|---|
| 입력 | 0개 이상의 입력이 존재해야 함 |
| 출력 | 1개 이상의 출력이 존재해야 함 |
| 명백성 | 각 명령의 의미가 모호하지 않고 명확해야 함 |
| 유한성 | 한정된 단계 이후 반드시 종료되어야 함 |
| 유효성 | 각 명령이 실제로 실행 가능한 연산이어야 함 |
6) 알고리즘을 기술하는 방법
- 자연어
- 사람이 읽기 쉽다.
- 정의가 불명확하면 의미가 모호해질 수 있다.
- 흐름도(flowchart)
- 직관적이고 전체 흐름을 파악하기 쉽다.
- 알고리즘이 복잡해질수록 흐름도도 복잡해진다.
- 의사코드(pseudocode)
- 구현 세부사항을 감추고 핵심 논리에 집중할 수 있다.
- 실제 프로그래밍 언어로 옮기는 과정에서 추가 해석이 필요할 수 있다.
- 특정 프로그래밍 언어
- 실제 구현과 실행을 바로 다룰 수 있다.
- 구현 세부사항이 알고리즘의 핵심 이해를 방해할 수 있다.
7) 데이터의 종류(Data Type)
- 수치 데이터: 정수, 실수, 복소수 등
- 문자 데이터: 영문자, ASCII, 한글 코드, 유니코드 등
- 논리 데이터:
True,False - 자료형에 따라 저장 방식과 처리 방식이 달라진다.
- 파이썬에서는 정수, 리스트, 딕셔너리 등 다양한 자료형을 제공한다.
수치 데이터의 경우 표현 방식에 따라 고정소수점과 부동소수점으로 나뉘며, 자리수와 그에 따른 리소스 사용 측면에서 차이가 발생한다.
8) 자료형과 추상 자료형(ADT)
자료형은 데이터 객체의 집합 + 연산으로 볼 수 있다.
- 예를 들어
int자료형은 숫자 데이터와+,-,*,//같은 연산을 함께 포함한다.
추상 자료형(ADT, Abstract Data Type)은 프로그래머가 추상적으로 정의한 자료형이다.
- 다루는 데이터와 제공되는 연산을 기술한다.
무엇이 있는가,무엇을 하는가를 정의하지만, 구현 방법은 직접 포함하지 않는다.- 실제 동작 방식과 상세 설계는 구현 단계에서 수행한다.
Key Concepts
- 자료구조의 정의와 역할
- 선형 자료구조와 비선형 자료구조의 차이
- 프로그램에서 자료구조와 알고리즘의 관계
- 알고리즘의 필수 조건과 기술 방법
- 데이터 타입과 추상 자료형(ADT)의 기본 개념
p.s.
각 자료구조의 실제 동작 방식은 이후 파이썬 예제와 문제 풀이를 통해 더 구체적으로 정리할 예정이다.
References
- 강의교안(비공개)