본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #8 프로그램의 작성 단계

by Mr.Algo 2024. 3. 20.
728x90
반응형

실습창을 열 수 있습니다.실습창 열기

 

우리가 문제를 해결하려면 문제해결 방법을 연구하고, 그 방법을 컴퓨터에게 알려주어 처리하게 해야합니다. 우리 블로그에서는 문제해결방법(알고리듬 설계)과 컴퓨터에게 알려주는 말(언어)을 동시에 공부합니다.

 

컴퓨터에게 알려주는 말은 파이썬(python), 씨피피(C++), 자바(Java), 코틀린(kotlin) 등 종류가 많습니다. 우리는 효율이 매우 좋은 파이썬 언어를 사용합니다. 시작합시다.

 

1. 고양이와 병아리

고양이와 병아리가 꽃밭에서 놀고 있습니다.

고양이는 1마리이고 병아리는 3마리입니다.

꽃밭에서 놀고 있는 고양이와 병아리의 

머리의 수, 눈의 수 그리고 다리의 수를 구하여 봅시다.

 

1-1. 문제 분석

문제 분석(problem analysis)은 문제를 완전히 이해하는 것입니다.

중학교 2학년 정도의 학생에게 문제를 보지 않고 요점을 설명할 수 있습니까?

설명할 수 있으면 문제를 이해한 것입니다.

중학교 2학년이 국민의 표준 수준이라고 합니다. 방송도 중학교 2학년 수준에 맞추어 진행합니다. 위의 고양이와 병아리 문제의 요점을 설명하여 보세요.

더보기

고양이 1마리와 병아리 3마리가 있다. 고양이와 병아리의 머리의 수, 눈의 수 그리고 다리의 수를 구하자.

1-2. 입출력 설계

1-2-1. 입력 설계

이 문제를 해결하려면 반드시 알아야 되는 정보는 무었입니까?

대답하여 보세요.

더보기

고양이의 마리 수와 병아리의 마리 수

이와 같이 문제를 해결하려면 꼭 알아야 되는 정보를 입력(input, 인풋)이라 합니다.

이 문제를 해결하려면 어떤 정보가 입력되어야 합니까?

' 고양이의 마리수와 병아리의 마리 수'가 입력되어야 합니다.

이와 같이 문제해결을 할 때 필요한 정보를 정하는 것을 입력 설계(input design)라 합니다.

 

1-2-2. 출력 설계

우리가 알고 싶은 정보는 무엇입니까?

대답하여 보세요.

더보기

꽃밭에서 놀고 있는 고양이와 병아리의 

머리의 수, 눈의 수 그리고 다리의 수

이와 같이 우리가 알고 싶은 정보를 출력(output, 아웃풋)이라 합니다.

무엇이 출력되어야 합니까?

' 머리의 수, 눈의 수 그리고 다리의 수'가 출력 되어야 합니다.

이와 같이 문제 해결의 결과를 정하는 것을 출력 설계(output design)라 합니다.

 

입력 설계와 출력 설계는 프로그램을 작성하기 전에 결정하여야 합니다.

입력 설계와 출력 설계를 합하여 입출력 설계(input/output design, i/o design)라 합니다.

 

 

1-3. 처리

입력된 정보로서 출력 정보를 만드는 것을 처리(process, 프로세스)라 합니다.

처리를 하려면 다음의 2단계가 필요합니다.

 

1--3-1. 알고리듬 설계

입력된 정보로서 출력 정보를 만들려면 방법을 생각해야 합니다.

 

고양이 1마리와 병아리 3마리가 있다.

  1. 마리 수는 어떻게 구할까요? 고양이 마리 수와 병아리 마리 수를 더한다.
  2. 눈의 수는? 이미 구하여 둔 머리 수에 2를 곱한다.(눈이 2개씩 있으므로)
  3. 다리의 수는? 고양이의 마리수 에 4를 곱한 것과 병아리의 마리 수)에 2를 곱한 것을 더한다.

이렇게 문제해결 방법을 정하는 것을 알고리듬 설계(algorithm design)라 합니다.

 

1-3-2. 코딩

우리가 생각한 방법(알고리듬)을 컴퓨터에게 알려 주는 일을 코딩(coding)이라 합니다.

아래의 '더보기'에는 코딩에 대한 설명이 있습니다.

더보기

학생들이 학교에 가면 번호가 있고, 자동차 번호도 있고 주민등록번호도 있습니다.

왜 번호가 필요할까요?

어떤 대상을 편리하게 관리하기 위하여 그 대상을 간단한 숫자 또는 문자로 표시하지 않았을까요?

간단한 숫자 또는 문자를 코드(code)라 합니다.

 

우리는 print(5+3)을 사용한 경험이 있습니다.

이 프로그램을 실행하려면 컴퓨터 속에서는 괄호 속의 수식을 연산하고 그 결과를 화면 어딘가에 출력하도록 하는 긴 프로그램이 사용 되었을 것입니다. 이 때 사용한 긴 프로그램의 이름이 print아닐까요?

print는 학교의 번호처럼 긴 프로그램을 대신한 코드(code)입니다.

이러한 코드를 만드는 일을 코딩(coding)이라 합니다. 

영어에서 끝에 ing가 붙으면  '~하는 일'을 의미하기도 합니다.

read(읽다)==> reading(읽는 일, 독서), see(보다)==>seeing(보는 일, 관람)

처리(process)는 입력으로 출력을 만드는 것인데

이렇게 하려면 방법을 정하여(알고리듬 설계)  컴퓨터에가 알려 주어야(coding)합니다.

즉, 처리는 알고리듬 설계와 코딩을 합하여 이르는 말입니다.

 

1-4. 검정

코딩까지 완료되었으면 어떠한 경우에도 바른 결과가 나오는가 확인하여야 합니다.

프로그램이 바르게 실행되는 가를 테스트 하는 것을 검정(test run)이라 합니다.

수작업으로 여러가지 입력에 대한 답을 만들어 두고 컴퓨터에서도 바른 답이 나오는 가 확인합니다.

얘를 들면, 고양이 2마리 병아리 5마리일 때  7마리가 나오는가, 고양이 0마리 병아리 3마리면 3이 나오는가 등입니다.

이 때 사용한 데이터(data)를 테스트 케이스(test case)라 합니다.

 

1-5.. 수정

검정(test run)하는 동안 바른 결과가 나오지 않으면 잘못된 부분을 찾아서 고쳐야 합니다.

컴퓨터 프로그램에서 잘못된 부분, 버그(bug)를 찾아서 수정하는 작업(오류 수정)디버깅(debugging)이라 합니다.

 ‘프로그램이 디버깅되었다.’라고 얘기하는 것은 프로그램의 결함을 해결하여 더 이상의 잘못된 부분이 없다는 것을 의미합니다. bug은 벌레(나방)이고, debug은 벌레잡이이며 debugging는 벌레잡는 일입니다.

 

프로그램은 한 번에 완벽하게 작성되는 일은 거의 없습니다. 여러 번, 때로는 수십 번을 수정하여 완성됩니다

 

아래의 '더보기'에는 디버깅에 대한 설명이 있습니다.

더보기

 

그레이스 (1984년 촬영)

디버깅(debugging)의 유래는 그레이스(Grace Murray Hopper)라는 미국 해군에 소속된 여자 컴퓨터 과학자에게서 찾을 수 있습니다. 1940, 그녀가 마크 투(Mark II)라는 전자석으로 만들어진 컴퓨터로 일을 할 때 고장이 났습니다. 원인을 찾든 중, 전자석 사이에 끼여 있는 나방(bug)을 쓸어내자 정상이 되었습니다. 나방이 합선을 일으킨 것이었습니다. 그때부터 잘못을 고치는 일을 디버깅(debugging, 벌레 잡기) 한다.’ 라고 얘기하였습니다. 호퍼 여사는 수많은 업적을 남겼습니다. 그래서 그녀를 놀라운 그레이스(Amazing Grace)'라고 부릅니다.

2. 프로그램의 작성 과정

프로그램의 작성과정은 위에서 설명한 것과 같습니다.

그러나 일반적으로 작성과정을 얘기할 때는 처리에 있는 알고리듬 설계와 코딩을 독립시켜 6단계로 합니다.

정리하면 다음과 같습니다.


프로그램은 입력 - 처리 - 출력 으로 구성되며, 프로그램 작성은 아래의 6단계로 진행된다.

프로그램 작성  6단계

  1.  문제 분석(problem analysis)  --- 문제를 완전히 이해하는 것
  2. 입출력 설계(i/o design) --- 문제해결에 필요한 정보와 원하는 결과를 정하는 것
  3. 알고리듬 설계(algorithm design) --- 문제해결 방법을 정하는 것
  4. 코딩(coding) --- 문제해결방법(알고리듬)을 컴퓨터에게 알려 주는 것
  5. 검정(test run) ---  프로그램이 바르게 실행되는 가를 테스트 하는 것
  6. 수정(debugging) --- 오류를 수정하는 것

외우세요. 외울 뿐만 아니라 체화되어야 합니다.

*체화: 충분히 익혀 내 몸의 일부가 된 것처럼 자연스럽게 되는 것

 

긴 얘기 읽느라 수고하셨습니다.

다음 시간에는 코딩을 합시다.

위의 정리된 내용을 외운 사람은 오늘 공부 끝.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형