C언어 포인터와 배열 및 그 외의 추가적인 내용들에 대해서는 공부가 제대로 되어 있지 않은 상태이지만 정보처리산업기사 준비도 하면서 기본 문법만으로 할 수 있는 부분인 기본적인 알고리즘 중 수열에 대하여 예제 및 풀이 형식으로 글을 올리도록 하겠습니다.
(알고리즘 및 플로차트 등에 대한 내용은 추후 블로그 카테고리에 추가하여 올리도록 하겠습니다.)
1. 1+2+3+4+ ... +100까지의 합계를 구하는 순서도를 작성하시오.
문제 내용만 봤을 때는 Python이나 C 또는 Java로 생각나는 대로 바로 짜면 되서 쉽게 느껴졌었는데, 정해진 순서도에 맞게 짜려니까 어렵게 느껴지네요(저만 그런가 봐요...)
다음은 문제에 대한 순서도 입니다.
직관적으로 봤을 때 START --> STOP 까지 순서대로 진행이 되고, i<100 이라는 조건에서 조건을 확인 후 맞지 않으면 다시 반복 실행을 할 영역으로 돌아가는 것을 확인 할 수 있습니다.
문제에서 1번과 2번에 들어갈 내용을 작성하는 건데, 알고나면 쉬운데 처음 접할 경우 어려울 수 있습니다.(수학시간에 공부를 안 했던....)
문제의 1부터 100까지 양의 정수를 더할 경우 프로그램으로 코딩을 할 때 생각 할 것은 몇 가지 되지 않습니다.
1) 문제에 제시된 연산을 총 몇 회 할 것인지 (횟수 증가를 위한 변수 설정)
2) 연산의 결과를 저장할 변수 설정
3) 언제까지 연산을 할 것인지 조건 설정
이와 같은 내용을 바탕으로 순서도에 들어갈 내용을 생각 해보면 다음과 같이 지정 할 수 있습니다.
i=0이라는 연산 횟수에 대한 변수 설정, 연산의 누적된 결과를 저장할 J=0 변수 설정.
이를 바탕으로 i의 증가 값과 J값의 연산 방식을 각각 1번과 2번에 지정해 주면 됩니다.
1) i = i + 1
2) J = J + i
i값은 연산 횟수를 결정하는 값도 되지만 J = J + i에서 연산의 누적 결과를 저장하기 위한 값으로도 사용이 됩니다.
결과를 나열해보면 다음과 같습니다.
시작 : i = 0 J = 0
i = 0(i) + 1 J = 0(J) + 1(i)
i = 1 J = 1
i = 1(i) + 1 J = 1(J) + 2(i)
i = 2(i) + 1 J = 3(J) + 3(i)
i = 3(i) + 1 J = 6(J) + 4(i)
.
.
.
이러한 방식으로 진행이 됩니다.
해당 순서도를 코드로 작성하면 다음과 같습니다.
do ~ while문을 사용 하였는데, do ~ while문은 do 영역은 한 번은 무조건 실행하게 되는 영역입니다. 반드시 최소 한 번은 실행해야 할 경우 do ~ while문을 사용해 줍니다.
do 영역에서 i = i + 1로 i값을 증가시켜주고, J = J + i 로 연산의 누적 결과를 저장해 줍니다.
또한 while 조건에서 i < 100 으로 지정 해 주었는데, 이렇게 생각 할 수 있습니다. i <= 100 으로 설정해야 맞는거 아닌가? 라는 생각을 하실 수 있습니다.
이유는 간단합니다.
1 + 2 를 예로 들면 연산을 실행할 값은 1과 2로 2개가 존재하지만, 1과 2를 연산하는 횟수는 + 한 번 이기 때문입니다.
1~100 까지 1항부터 100번째 항 까지 공차가 1인 등차수열에서 항의 개수는 100개 존재 하지만, 연산의 횟수는 99회 이기 때문에 i = i + 1 에서 i 값이 1이 되고, 1부터 99까지 총 99회 연산을 실행하게 됩니다.
따라서 J = 5050 이라는 1부터 100까지 공차가 1인 등차수열의 합의 연산 결과를 확인 할 수 있습니다.
이번 글은 (수학을 못 했던) 저의 표현력이 많이 부족한 점 죄송합니다.
천천히 하나 씩 문제를 풀어보고, 한 문제 씩 예제와 풀이에 대하여 올리도록 하겠습니다.