알고리즘, 1~100 합 구하기, 홀수,짝수만 더하기
한 달 앞으로 다가온 2017년 마지막 정보처리기사 시험.
알고리즘 과목부터 시작하여 공부한 내용들을 하나씩 정리해 게시하려 합니다.
알고리즘 과목은 순서도와 C, Java 언어로 제시되며 곳곳의 빈 칸을 채우는 주관식 문제입니다.
문제를 순서도와 C 언어로 표현하여 정리하고 더불어 같은 내용을 JavaScript로도 표현하며 마무리 하겠습니다.
왜 JavaScript냐고요? 따로 공부하고 있어서요~ 겸사겸사 :-)
기본 사항들 - 순서도
순서도 기호
=
기호의 의미A = 1
위 식의 의미는 ‘변수 A가 1과 같다’가 아닌 ‘변수 A에 1을 대입한다’는 뜻입니다.
식은 우항(오른쪽)부터 왼쪽으로 읽는 것이 편합니다.
A = A + 1
위 식의 의미는 ‘변수 A에 1을 더해서 그 값을 다시 A에 대입한다’는 뜻입니다.
한국어 문법과 의미 순서가 반대이기 때문에 우항부터 읽는 것이 의미가 더 자연스러울 수 있습니다.
영어식 언어 문법에 익숙하다면 순서대로 읽으시면 됩니다.
기본 사항들 - C언어
출력 명령문 printf
값을 출력할 때 사용하는 명령문 printf의 사용법은 다음과 같습니다.
printf("서식문자열", 변수)
서식문자열은 출력할 변수를 표현할 방식을 설정하는 것입니다.
가능한 표현 방식으로는,
- %d : decimal, 변수 값을 10진수로 표현
- %o : octal, 변수 값을 8진수로 표현
- %c : character, 변수 값을 문자 방식으로 표현
- %s : string, 변수 값을 문자열 방식으로 표현
- %x : hexadecimal, 변수 값을 16진수로 표현
- \n : 공백 줄 하나를 삽입 (HTML 태그
<br>
과 비슷)
연산자
- A++ : 변수 A를 1 증가 시킨 후 사용
- A– : 변수 A를 1 감소 시킨 후 사용
- A == B : A와 B는 같다
- A != B : A와 B는 같지 않다
기초 알고리즘
1~100 합 구하기
1+2+3+...+99+100의 결과를 구하는 알고리즘
입니다.
규칙을 잠시 생각해보면,
- 숫자가 1씩 증가한다.
- 1씩 증가한 수를 증가하기 이전의 수에 더한다.
- 이를 100이 더해질 때까지 반복한다.
규칙 1과 2에서는 계속 숫자가 변화합니다. 따라서 변화하는 수, 즉 변수가 2개 필요한 것으로 보입니다.
- 변수 1 : 1씩 증가하는 변수
- 변수 2 : 변수 1의 합을 누적하는 변수
이를 순서도로 나타내면 다음과 같습니다.
이를 C언어로 나타내면 다음과 같습니다.
main(){ int A; int SUM; A = 0; SUM = 0; while(A < 100){ A++; SUM = SUM + A; } printf("%d", SUM);}
이를 JavaScript로 나타내면 다음과 같습니다.
function sum1to100(){ var A = 0; var SUM = 0; while(A < 100){ A++; SUM = SUM + A; } return console.log(SUM);}
만약 1에서 100까지의 수 중에 짝수, 혹은 홀수만 더하고 싶다면
어떻게 할까요?
간단합니다. 짝수에 2를 더하면 다시 짝수가 되고, 홀수에 2를 더하면 역시 홀수가 되니까
변수 A에 1을 증가시키는 A++
대신 A = A + 2
를 사용하고, A의 초기값으로 짝수나 홀수 중 하나를 선택하면 되겠지요.
짝수 합을 C로 다시 나타내면,
main(){ int A; int SUM; A = 0; SUM = 0; while(A < 100){ A = A + 2; SUM = SUM + A; } printf("%d", SUM);}
홀수 합의 경우는 A의 범위와 SUM의 초기 값을 신경써야 합니다.
main(){ int A; int SUM; A = 1; SUM = 1; while(A < 99){ A = A + 2; SUM = SUM + A; } printf("%d", SUM);}
while문의 첫 작업이 A의 값을 2증가시키는 것이기 때문에 최초로 SUM에 더해지는 값은 3입니다.
만약 SUM 초기 값을 0으로 설정했다면 범위가 1~100이 아닌 3~100이 될 것입니다.
따라서 SUM 초기 값으로 1로 변경했으며 while문의 A의 범위도 99로 조정했습니다.
만약 그대로 100을 주었다면 99에 2를 증가시킨 101이 한 번 더 더해질 테니까요.
그리 어렵지 않은 문제들이지만, 마지막 반복을 결정하는 변수 A값의 범위를 주의해야 합니다.
행여나 99까지만 더하고 100을 빼먹는다던지 101까지 더해버리면 큰일이니까요!