1.1 자료구조와 알고리즘
1. 자료구조란?
자료구조: 자료를 정리하는 방법
일상생활에서 문제가 생겼을 때 해결하는 방법들이랑 비슷하다고 말 할 수 있다
예를 들어, 설거지를 할 때는 그릇을 미리 쌓아둔 다음 정리한다던가
마트 계산대에서는 줄을 세워 계산한다던가 말이다
자료구조의 종류는 스택,큐,리스트,사전,그래프,트리가 있으며
자세한 건 나중에 알아보도록 하자
이렇듯 프로그램에서 자료구조를 이용해 자료를 처리하면
문제를 해결하는 절차도 함께 필요하다
이것을 알고리즘이라고 부른다
2. 알고리즘이란?
알고리즘: 문제를 해결하는 절차
자료구조로 자료를 정리했다면 알고리즘으로 문제를 해결해야한다
설거지에 비유하자면 자료구조는 싱크대에 그릇 쌓아놓기이고,
알고리즘은 어떻게 그릇 닦을지 생각하기이다.
여러 생활 예시들로 자료구조와 알고리즘이 익숙해졌다면
프로그램을 제작하는 시각에서도 한 번 살펴보자
시험 성적을 읽고 1등을 뽑는 프로그램을 만든다면,
우선 시험 성적을 저장해놓을 자료구조를 정해야한다.
만약 배열에 시험 성적을 저장한다면 배열이 바로 자료구조가 될 것이다
이후 1등을 뽑기 위해 문제 해결 방법을 고안할 차례이다
가장 쉬운 방법을 생각해보자면,
변수를 하나 지정하고, 처음 값부터 이후 값까지 비교하는 것이다
이런 문제 해결 절차를 알고리즘이라고 한다
알고리즘이 되는 조건
사실 정확하게 말한다면 알고리즘은
문제 해결 방법을 '컴퓨터'가 이해할 수 있게 쓴 것이다
그래서 알고리즘은 특정한 일을 수행하는 명령어의 모임이라고도 할 수 있다
명령어 모임들이 모두 알고리즘이 될 수 있는 것은 아니고
4가지 조건을 만족해야 한다
1. 1개 이상의 출력(출력)
2. 명령어의 의미는 명확하게(명확성)
3. 실행 이후 반드시 종료 되어야하며(유한성)
4. 컴퓨터로 실행 가능해야한다(유효성)
알고리즘은 입력은 없어도 되지만 출력은 반드시 필요하며,
의미는 명확하게 표현되고, 단계 후 종료가 필요하고
당연하게도 컴퓨터로 실행되어야만 한다
알고리즘 표기 방법
1. 자연어(한글이나 영어 등등)
2. 흐름도
3. 의사코드
4. 프로그래밍 언어
주로 사용하는 건 의사코드와 프로그래밍 언어이다
체계적이고 명확하게 표현할 수 있어 앞선 방법들에 비해 유용하다
앞으로 이 책에서는 의사코드를 사용해 설명할 것이고,
C언어와 크게 다르지는 않아서 걱정할 필요는 없다!
(대입 연산자가 <- 인 것에만 주의하자)
1.1 QUIZ
01. 문제를 풀기 위한 단계적인 절차는 알고리즘이다.
02. 알고리즘을 기술하기 위한 방법에는 자연어, 흐름도, 의사코드, 프로그래밍 언어가 있다.
03. 알고리즘이 되기 위한 조건이 아닌 것은? , 4번 반복성