알고리즘에 익숙해지기

jadive study·2022년 10월 12일
0

삼각형의 면적을 계산하는 알고리즘

아는 것부터 처리 단위로 분해한 후 각각의 절차를 생각한다
-삼각현의 면적 =밑변길이 x 높이 / 2

밑변의 길이, 높이 , 면적을 대입하는 실수형 변수가 3개이고 처리는 순차구조이다.

알고리즘을 나타내는 순서도 만들기

base, 높이를 대입할 변수 height 면적을 대입할 변수를 area로 정한다.

사칙 연산을 나타내는 산술연산자

13/3 -> 13/3 몫
13%3 나머지

두 데이터의 대소를 판단하는 알고리즘

2개의 데이터 중에서 큰 것은 어느 쪽일까?
-실수횽 변수를 2개 준비하여각각의 데이터를 입력한다
변수형을 a,b라고 하자

1데이터를 비교하는 처리를 고려한다 a와 b를 비교하여 a 쪽이 크면 a를 출력하고, 그렇지 않으면 b를 출력한다. 특별히 계산할 필요도 없는 단순한 알고리즘이므로 이것마으로 대소 판정을 마친다.

알고리즘을 의사 언어로 작성하기

가장 먼저 변수를 선언한다. a>b는 선택 구조이므로 화살표를 사용하여 세로로 양쪽 끝단을 연결한 후 yes인 경우의 처리와 no인 경우의 처리를 각각나누어 표현한다
no인 경우의 처리는 조건식 a=b의 선택구조가 되므로 선택 구조 안에 선탲국조가 들어가는 중첩구조가 된다 yes인경우와 no인 경우로 나눈어 작성한다

두 변수의 데이터를 교환하는 알고리즘

두 데이터를 교환하는 것은 간단한가?

-데이터 교환용의 변수를 사용한다
두 변수의 데이터를 교환하기위해서 각각의 변수와는 별도로 데이터를 주고받을 변수를 준비하고, 이를 정수형 변수 w라고 하자. 처음에 이 변수 w에는 대입할 변수 a를 미리 복사해 둔다. 이렇게 해야만 2개의 변수 데이터를 삼가 변환 형식으로 교환할 수 있게 도니다.

-변수 a에 데이터를 변수 w에 대입
-변수 b에 데이터를 변수 a에 대입
a->w b->a w->b

알고리즘을 의사 언어로 작성하기
a<-11 b<-55 w<-a a<-b b<-w
a,b를 출력한다

합계값을 계산하는 알고리즘

단순히 합계를 구하는 알고리즘도 있다

가장 먼저 5개 요소를 갖고 있는 정수형 배열을 준비한다. 첨자는 앞에서부터 0,1,2,3,4이다 각 요소에는 다음과 같은 데이터가 들어 있다. array[0]은 12, array[1]은 13, array[2]는 11 array[4]는 10이다.

5개의 데이터 합계를 구하는 가장 단순한 알고리즘은 전부를 더하는 처리를 실행하는것이다. 합계값으 정수형 sum에 대입한다.

array[0]+array[1]+array[2]+aray[3]->sum

반복 구조를 사용한 알고리즘 생각해 보기
array[0]->sum sum+array[1]->sum

얼핏보면 제대로 된 처리된 것처럼 보이지만 처음의 array[0]->sum이 다른처리와 다른모습이다

변수의 초기화

array[0]->sum을 'sum+array[0]->sum'으로 바꾸었다.
이렇게 변경하기 위해 미리 sum에 0을 대입하는 처리를 추가한다.
처음에 대입한 0을 초깃값이라고한다

왜 초기화가 필요한가?

2장에서 배운 것처럼 변수는 메모리에서사용하고 있지 않은 장소를 자동으로 찾아주는 기능이다. 그 장소에서는 전에 사용한 데이터가 지워지지 않은 상태로 남아있을 가능성이 있다. 즉, 새롭게 선언한 변수안에는 이미 어떤 데이터가 들어가 있을지도 모른다. 변수sum의 값이 0일 것이라는 생각만 가지고 array[0]을 더하면 혹시 그안에 남아 있는 데이터가 있을 경우 합계값이 이상해진다.

똑같은 절차를 반복 구조로 한다

반복 구조를 만들 때의 핵심은 변화하고 있는 부분의 처리다.
0,1,2,3,4와 같이 하나씩 증가하고있다.
즉, 반복하고 싶은 처리에 첨자를 하나씩 증가시키는 처리를 추가하여 함께 반복 처리로 바꾸면 된다.

배열의 첨자를 변수i롤 치환한다

정수형 변수 i를 준비하여 모든 첨자를 i로 치환한다.
i는 첨자를 의미하는 영어인 index의 첫 문자이다. 처음 처리가 array[0]부터 시작하므로 i의 초깃값은 0으로한다

첨자를 변수 i로 치환한 순서도

각 요소의 데이터를 변수 sum에 더하는 처리를 실시한 후 변수 i의 값을 하나 증가시키는 처리 i+1 -> i를 실행하고 있다.

0->i sum+array[i] ->sum
i +1 -> i

무한 루프를 방지하는 처리를 추가한다

0->i '변수 i는 5보다 작은가?'라는 판단 처리를 알고리즘에 추가한다
i<5라는 조건식의 선택 처리를 추가했다. 변수가 i가 4가 될 때까지 반복처리를 실행한다.
여기서 '0->i'바로 뒤, 즉 반복 처리에 들어가기 전에 '변수 i는 5보다 작은가?'라는 판단 처리를 알고리즘에 추가한다.

알고리즘을 의사 언어로 작성하기
'i<5'부터 'i<-i+1'까지다 마지막으로, 변수sum값을 출력하여 종료한다.

profile
개발 메모창고

0개의 댓글

관련 채용 정보