시작하기 앞서 따로 이야기 하지 않고 자료구조 및 알고리즘 개시된 개시물의 예제와 알고리즘은
Computational Thinking & 창의적 문제해결 방법론이라는 책을 참고했음을 알림니다.
최적화 문제(Optimization problem): 가능한 여러 가지 해들로부터 최적의 해를 찾아 내는 문제
로서 대표적인 예로는 배낭 문제(knapsack problem)를 들 수 있다.
정보과학적 문제 해결 절차 및 문제 해결 방법
문제 이해 및 분석 → 정보 과학의 원리 적용 문제 해결 → 방법 설계-알고리즘 설계
문제 해결 방법 구현-알고리즘 구현 → 결과 검토
ex) 다음의 인사 자료를 토대로 영업부에서 가장 많은 연봉을 받는 사원의 사원번호, 이름, 연봉을 찾아라.
자료의 구조화
자료의 구조화: 정보 과학에서 자료의 집합을 문제 해결에 용이한 형태 및 기능을 갖춘 구조로 변환하는 과정
배열(Array)
컴퓨터에서 자료를 다룰 때 사용하는 가장 기본적인 자료 구조. 자료들을 배열 내에 일렬로 나열
하여 관리한다.
*배열
- 배열의 각 요소는 배열명에 원소 번호를 붙여서 명명
- 첫 번째 원소는 score[0]과 같이 0부터 시작
score 배열의 첫 번째 원소: score[0]
score 배열의 두 번째 원소: score[1]
︙
score 배열의 세 번째 원소: score[9]
*배열의 특징
- 정보 과학에서 가장 기본이 되는 자료 구조이다.
- 배열의 자료 저장 공간들은 위치 번호를 가진다.
- 배열의 특정 공간을 가리킬 때는 배열 이름과 위치 번호를 조합하여 표현한다.
- 할당 연산자 ':='를 사용하여 배열에 자료를 저장하거나 배열의 자료를 읽어 온다.
- 2차원 이상의 구조를 가지는 배열을 다차원 배열이라고 한다.
*배열의 예
ex)배열에서 성적을 하나씩 꺼내서 평균을 계산하는 알고리즘의 예
90 86 75 50 98 64
-의사 코드로 배열을 표기하기
list = {90, 86, 75, 50, 98, 64} while i ← 배열의 크기 average ← (sum / 배열의 크기) |
배열에서 성적을 하나씩 꺼내어 합계를 구하려 할 때, 배열의 크기가 크다면 반복 구조를 사용한다.
*배열의 초기화
1. 배열을 먼저 선언하고 배열의 각 원소 값을 할당하는 방법
int a[3]; //배열의 선언 a[0] = 10; //배열의 초기화 a[1] = 15; a[2] = 20; |
2. 배열을 선언하면서 초기화 하는 방법
int a[3] = {10,15, 20}; //배열을 선언함과 동시에 초기화 |
*1차원 배열의 예
1. 배열을 초기화하고 원소 출력하기
#include <stdio.h> int main(void) for(i = 0; i < 3; i+ +) return 0; |
2. 배열 원소의 합과 평균 구하기
#include <stdio.h> int main(void) for(i = 0; i < 5; i+ +) average = (double)sum / i; printf(“배열 A 원소의 합은 %d다.\n”, sum); return 0; |
*2차원 배열
행과 열로 표현된 행렬과 비슷하다.
int a[2][4];
*2차원 배열 선언
*2차원 배열의 예
1. 2차원 배열을 초기화하는 방법
-배열을 선언한 후 배열의 각 원소 값을 할당하는 방법
-선언과 동시에 초기화하는 방법
int a [2][3] = {{10, 20, 30}, {40, 50, 60}};
int a [2][3] = {10, 20, 30, 40, 50, 60};
-중괄호( { } )로 배열의 원소를 행 단위로 묶어 초기화 하거나 전체 원소를 묶어 초기화
-2차원 배열은 선언할 때 행의 개수 생략 가능(열의 개수 생략하면 오류 발생)
-올바른 예: int a [] [3] = {10, 20, 30, 40, 50, 60};
-잘못된 예1: int a [2] [] = {10, 20, 30, 40, 50, 60};
-잘못된 예2: int a [] [] = {10, 20, 30, 40, 50, 60};
-잘못된 예3: int a [] [3];
-올바른 예: int a [] [3] = {10, 20, 30, 40};
2. 2차원 배열의 C코드 예제
//2차원 배열의 초기화// int main(void) for(i = 0; i < 2; i+ +) return 0; |
//2차원 배열의 합 구하기// int main(void) for(i = 0; i < 2; i+ +) printf(“2차원 배열 a의 합은 %d다.\n”, sum); return 0; |
//국어, 영어, 수학의 평균 구하기// int main(void) double aveClass[3]; for(j = 0; j < 3; j+ +) aveClass[j] = (double)sum / i; if(j == 0) //다음 과목의 평균을 구하기 위해 sum을 초기화한다. |
'공부 > 자료 구조 및 알고리즘' 카테고리의 다른 글
자료의 탐색 - 이진 탐색(Binary search) (0) | 2019.07.13 |
---|---|
자료의 탐색 - 순차 탐색(Sequential search) (0) | 2019.07.12 |
문재 해결을 위한 기본적 접근 방법 - 트리(Tree) (0) | 2019.07.12 |
문재 해결을 위한 기본적 접근 방법 - 큐(Queue) (0) | 2019.07.06 |
문재 해결을 위한 기본적 접근 방법 - 스택(Stack) (0) | 2019.06.27 |