정보처리기능사 실기 Part 1 - Chapter 1. 알고리즘

HongInSung·2022년 7월 12일
1
post-thumbnail

이 글은 이기적 정보처리기능사 실기 기본서를 기반으로 제작되었습니다.

알고리즘?

알고리즘은 자료 구조와 함게 프로그램을 구성하는 요소, 조금 좁게 생각하자면 어떤 문제에 대한 답을 찾는 해법을 의미합니다.
알고리즘 문제는 제가 정처기를 보면서 한번도 순서도가 나온걸 본적이 없습니다.
그래서 이 챕터는 가볍게 훑어보고 넘어갑시다

알고리즘의 5가지 특성

알고리즘은 기본적인 명령어를 통해서도 작성이 가능합니다.
그 명령어는 5가지 특성을 만족하여야 된답니다.

  • 입력 : 외부로부터 입력되는 자료가 0개 이상이여야 합니다.
  • 출력 : 출력되는 결과가 1개 이상이여야 합니다.
  • 명확성 : 각 명령어의 의미가 명확하여야 합니다.
  • 유한성 : 정해진 단계를 지나면 종료되어야 합니다.
  • 유효성 : 모든 명령은 실행이 가능한 연산들이어야 합니다.

어려워 보이지만 실은 아주 간단합니다.

이렇게 cmd에서도 실행 가능한 기본 명령어를 예로 들어보았습니다.
하지만 위 조건에 맞지 않게 실행한다면 어떻게 될까요?

입력과 출력, 유한성은 조건에 만족하지만, 명확성과 유효성은 조건에 부합하지 않아 에러를 냅니다.

알고리즘의 표현은 자연어, 순서도, 의사 코드, 프로그래밍 언어 등을 이용하는 방법이 있습니다.
꼭 프로그래밍 언어가 아니더라도 알고리즘의 표현은 가능합니다.

순서도

알고리즘을 표현하는 여러 방식 중 하나입니다.
미리 약속된 기호와 그림을 통해 논리적 절차, 흐름, 연산 등을 시각적으로 표현한 것입니다.
순서도는 제가 지금까지 시험을 봤었는데 한문제도 안나왔었습니다.
( 혹시 모르죠? 언제 나올지? )

순서도 도형


단말이라고 불리며, 시작과 끝을 나타냅니다.

흐름선입니다. 어떤 흐름으로 진행되는지 표시합니다.

준비라고 불리며, 초기 설정을 나타냅니다.

입력, 출력을 의미하며, 자료의 입출력을 나타냅니다.

처리를 의미하며 산술 연산을 나타냅니다.

판단이라고 불리며, if문 같이 조건을 비교한 후, 흐름을 결정합니다.

표시라고 불리며, 화면에 출력결과를 표시합니다.

위에 예시 이외에도 반복문같은 기호는 많지만, 구지 외우실 필요는 없습니다.
순서도 문제는 아마도 안나올것같으니까요.

순서도 산술 연산

산술 연산.. 다 아시잖아요?

  • +,- = 더하기, 빼기
  • *,/ = 곱하기, 나누기 ( X, ÷ 아님 주의 )
  • %, ^ = 나머지, 거듭제곱 ( 나머지는 mod라고도 표현할 수 있습니다 )

순서도 관계 연산

관계 연산도 아실거라고 믿지만 일단 끄적여봅니다.

  • 20 > 10 = 크다 ( 초과 )
  • 20 >= 20 = 크거나 같다 ( 이상 )
  • 20 < 30 = 작다 ( 미만 )
  • 20 <= 20 = 작거나 같다 ( 이하 )
  • 20 = 20 = 같다
  • 20 != 20, 20 <> 20 = 같지 않다. ( 두가지 다 동일한 뜻입니다. )

순서도의 기초 공식

여기에선 변수와 상수 등 프로그래밍에서도 중요한 공식이 나와서 꼭 읽어보셔야 할겁니다.

변수와 상수

변수는 변하는 수라는 의미로, 고정되어 있지 않은 값 또는 어떤 값을 주기억장치에 기억하기 위해 사용하는 공간입니다.

상수는 변수와 다르게 고정되어 있는 값 또는 이미 저장되어 있는 변하지 않는 값을 의미합니다.

JS로 따지자면 const가 상수, 나머지 let, var은 변수라는 뜻이죠.
여기서 = 이 기호는 같다라는 의미가 아닌 대입하다라는 의미로 쓰입니다.

수의 증감

  1. 수(i)의 초기값이 설정되어 있는 경우.
    이경우 i = i + 1 또는 i = i - 1으로 수의 증감을 표현할 수 있습니다.
    단, 초기값이 설정되어 있지 않은 경우 위에 있는 식은 사용할 수 없습니다.
  2. 수(i)의 초기값이 설정되어 있지 않은 경우.
    i = 고정값 - 변수로 표현할 수 있습니다.
    만약 k가 0으로 선언되어 있다면 k = k + 1로 증가시켜준 뒤
    i = 10(고정값) - k(변수) 로 i값을 증감시킬 수 있습니다.

합의 공식

  • 합계 = 합계 + 수
    1 ~ 10까지 더한 수를 출력한다고 해봅시다.
    그렇다면 i를 0으로 두고 i값을 증가시키면서 더할 수 밖에 없습니다.
    그렇다면 반복문을 이용해서 i = i + 1을 하면서 sum = sum + i를 하면 되겠군요

평균 공식

  • 평균 = 합계 / 개수
    자, 위에 합의 공식에서 한 방법처럼, 1 ~ 10까지 더한 수와 함께 평균을 구해봅시다.
    어떻게 하면 좋을까요? 네, 아주 간단합니다.
    그냥 마지막 전 처리과정에 avg = sum / i를 하시면 됩니다.
    평균으로는 5.5가 나오는군요. 아주 좋습니다.

부호 변경

부호의 변경은 판단 기호를 이용하여 계산하는 방법과 아래에 식을 사용하여 연산합니다.

  • 부호 = 부호 * (-1)

만약 첫번째 방법인 판단 기호 방법을 쓴다면 if문을 돌리면서 하면 되겠군요.

  • 첫번째 방법
    자, 우선 초기값부터 설정을 해봅시다.
    i = 0, sum = 0, s = 1 ...잉? s는 뭐하는 놈인고?
    s는 부호변경을 하는데 있어서 중요한 역할입니다.
    s는 1과 -1를 판단 기호를 이용하여 왔다 갔다 합니다.
    만약 1이라면 -1로, -1이라면 1로 바뀌죠.
    그래서 sum = sum + ( s * i ) 이렇게 하면 됩니다.

근데 이렇게 하면 너무 귀찮아집니다. if문도 2개를 써야 하죠. 그래서 두번째 방법을 한번 써봅시다.

  • 두번째 방법
    아까와 같이 초기값을 설정해줍니다.
    i를 증감시켜주고 sum = sum + ( s * i ) 이렇게 하는거까지는 똑같습니다.
    자 이제 s를 어떻게 처리해주어야 할까요?
    s = s * ( -1 ) 이렇게 처리해주시면 됩니다. 그럼 이렇게 귀찮은 반복문 두번 안쓰고도 처리가 가능합니다.

몫과 나머지


  • 값 / 수로 표현합니다.
    결과값은 정수형으로 표현한다네요. ( int )
    ex) 4 / 2 = 2, 5 / 2 = 2
  • 나머지
    값 % 수로 표현합니다.
    ex) 7 % 3 = 1, 5 mod 2 = 1

이 몫과 나머지는 입력된 수가 짝수인지 홀수인지 구분하는 곳에 쓰입니다.
만약 2를 입력받았을때 입력된수 % 2 == 0 이라면 짝수, 아니라면 홀수라고 처리가 가능하죠.

배열

배열은 번호에 대응하는 데이터들로 이루어진 자료 구조를 의미합니다.
변수를 연속적으로 저장하기 위해 확보한 메모리 공간을 말하기도 합니다.
만약 a[5]라면 이 변수에 주소값은 a[0] ... a[4]의 주소로 이루어져 있습니다.

왜 0부터 시작함?
프로그래밍의 배열 인덱스 값은 항상 0부터 시작한다는 것을 잊지 맙시다!
참고로, 순서도에서는 0 또는 1로 시작이 가능합니다.

마치며

순서도는 거의 나오지 않는 문제이므로 넘어가도 좋지만, 최소한 순서도의 기초공식은 보고 다음 챕터로 넘어가시는걸 추천합니다.
프로그래밍에서도 중요한 공식이기 때문입니다. 나중에 허우적대지 마시고, 기초공식이라도 충분히 이해하시고 넘어가심 됩니다. 다음 챕터때 다시 보죠.

profile
안녕하세요! 풀스택 노려보고 있는 홍인성입니다!

0개의 댓글