[알고리즘 이해] 알고리즘 개념과 표현 및 순서도의 이해

알고리즘이란 순서도의 이해




 알고리즘 개념과 표현 및 순서도의 이해 


얼마 전, 카카오 회사에서 첫 신입 개발자 공채를 '알고리즘'을 이용한 '코딩 테스트'만으로 신입사원을 뽑았다고 합니다. '알고리즘이 뭐길래!! 대단한 건가?' 이런 생각이 듭니다.

넓은 의미로서의 알고리즘이란, 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것입니다.

알고리즘이란 주어진 문제를 논리적으로 해결하기 위한 절차나 방법을 말하는 것이므로, 실생활에서도 알고리즘은 항상 따라다니게 됩니다.

수학문제풀이 알고리즘예

- 라면을 맛있게 끓여 먹고 싶은데 이번엔 뭘 넣고 어떻게 끓여볼까?

- '친구랑 만나기로 한 장소에 찾아갈 때 무엇을 타고 어디로 어떻게 가야하지? 빨리가려면 어느 길로 가야하지?'

- 오늘은 머리부터 감을까? 몸부터 닦을까?

- 놀이동산에 왔는데 뭐부터 탈면서 놀아야 시간안에 다 탈수 있지?

- 백화점에 왔는데 어디서부터 쇼핑을 해볼까?

- 사칙연산 문제에서 어느 연산부터 계산하는 거지?

- 용돈 만원을 탔는데 뭐부터 살까?

- 휴가때 해외 여행을 하고 싶은데 어느나라의 어디부터 가볼까?

이러한 상황들은 '주어진 문제를  어떻게 해결할까'를 생각하며 절차나 방법들이 있는 '알고리즘'입니다.


심지어 태어나면서부터도 알고리즘을 배워나갑니다.

- '옷을 뭐부터 입지?'

- '밥을 먹으려면 어떻게 해야 하지?'

- '걸음마를 할 때 어느 발부터 내딛어야 하지?'


이 모든 것이 알고리즘이라고 생각하시면 됩니다. 만약 아이가 밥먹는 법을 배울 때 '오른손으로   숟가락을 검지와 엄지 손가락으로 잡고  숟가락으로 밥을 떠서   입으로 가져간다' 라고 하는 동작을 하는 것도 알고리즘입니다. 알고리즘이 얼마나 효율적이냐에 따라 밥을 먹을수도 못먹을 수도, 빨리먹을수도 천천히 먹을수도 있습니다. 알고리즘이 제대로 되어 있지 않으면 밥을 떠서 코로 가져갈 수도 있으니까요.


컴퓨터로써의 알고리즘은 프로그램 설계 과정 중의 하나이고, 위 개념을 컴퓨터를 이용해서 문제를 해결하는 것입니다.


  알고리즘 교육은 왜 필요할까요? 

알고리즘 교육이 필요한 이유는, 

- 문제를 인식하고

- 문제 해결 방법을 생각하고

- 문제 해결 방법을 구현해 내는 능력을 키워줄 수 있습니다.


예를 들면 오늘 해야할 일이, 학원을 갔다 와야 하고, 친구와 만나기로 했고, 서점에 가서 책을 사와야 하고, 엄마가 할머니 댁에서 가져오라고 시킨 심부름도 있고, 수행평가 숙제도 해야 하는 등 여러 가지 할 일이 많다고 해 봅시다. 여기에서 '아휴~ 왜 이렇게 할 일이 많지?' 하고 그냥 있으면 제대로 다 할 수가 없습니다. 이때, '오늘은 다른 날보다 할 일이 많네..' 라고 문제 인식을 하고 '그러면 뭐부터 해야 할까?'하고 순서를 정리하거나 스케줄표를 만들어서 시간대별로 같이 묶어서 할 일의 순서를 정해서 문제 해결 방법을 생각합니다.

'학교 끝나고 학교 바로 옆에 할머니 댁이 있으니, 먼저 들러서 엄마 심부름하고 집에 오면서 서점에 들르면 되겠다. 그리고 친구는 학원 끝난 다음에 잠깐 만나기로 하고, 8시에 집에 와서 수행평가 숙제를 하고 11시에 잠을 자기로 하자'라고 계획을 세웁니다. 그리고 계획한 순서대로 실행하는데, 알고리즘 교육은 이러한 문제를 해결할 수 있는 능력이 향상될 수 있다는 것입니다. 이것은 모든 일에 적용되어 실현할 수 있으며, 인간 생활을 영위할 때 빠질 수 없는 부분이기도 합니다.


  알고리즘의 이해와 표현  


그러면 알고리즘의 개념을 이해하고 특정한 알고리즘을 순서도로 표현해 보는 활동을 통해, 알고리즘이란 무엇인지와 알고리즘을 표현하는 순서도의 기호와 의미에 대해 알아보도록 하겠습니다.


  알고리즘은  '주어진 문제를 해결하기 위해 명확히 정의된 순서나 방법들의 모임' 입니다. 그러면 생활 속에서 알고리즘으로 표현할 수 있는 예를 찾아보면 무엇이 있을까요?

알고리즘 예 1) '가장 빨리 가려면 어느 길로 가야하지?' 

'우리 집에서 학교까지 가는 길'은 어떨까요? 우리 집에서 학교까지 가는 방법은 굉장히 많습니다. 빠르게 갈 수 있는 지름길도 있고, 횡단보도 건너서 갈 수 있는 길, 돌아서 갈 수 있는 길, 자전거 타고 갈 수 있는 길 등 아주 많은 경우의 수가 나오게 됩니다. '현관문을 열고 나온다 - 10층에서 엘리베이터를 탄다 - 엘리베이터를 내려 도로를 건너 10분 동안 직진한다 - 횡단보도를 건넌다 - 좌회전한다 - .... ' 학교까지 가는 길은 아주 많은 방법이 정의되어 나열될 수 있습니다. '우리집에서 학교까지 가는 길'도 알고리즘 맞습니다.


가장 빨리가는 알고리즘예



알고리즘 예 2) '라면을 어떤 순서로 무엇을 넣어 끓여야 맛있을까?'

'요리하는 방법, 요리 레시피'는 알고리즘일까요? 요리 레시피를 보면 해당 요리를 완성하기 위해 처음부터 끝까지 다 정리해 놓은 것을 볼 수 있습니다. '간장 한 큰술, 고추장 1/2스푼, 2분 동안 약한 불로 데운 후.... ' 이런 식으로 말입니다. 명확히 정의된 순서들의 모임이라고 할 수 있으니 요리 레시피는 알고리즘이라고 할 수 있습니다.


라면끓이는 법 알고리즘예



알고리즘 예 3) '이 블록을 완성하려면 어떤 순서로 맞춰야 하지?' 

'블록 조립하는 방법' 이것도 알고리즘이 될 수 있습니다. 블록으로 로봇을 만든다면 어떤 블록을 아래에 놓고 어떤 블록을 위에 꽂아야 할지 순서대로 생각하며 만들게 됩니다. 순서의 조합입니다. 


블록맞추는 순서 알고리즘



알고리즘 예 4) '화장할 때 어떤 것부터 발라야 하지?' 

화장하는 방법은 사람마다 제각각 입니다. 그냥 영양크림만 바르는 사람도 있고, 순서대로 다 바로 색조화장까지 하는 사람도 있습니다. 사람마다 다를 수도 있지만 자신만의 알고리즘으로 화장을 하는 것이죠.

화장하는 순서 알고리즘



알고리즘 예 5) 수학 문제 풀때 어떤 순서로 풀어야 하지?

'수학 문제 푸는 방법'도 알고리즘입니다. 만약에 사칙연산 혼합계산이 나온다면 어떻게 계산할까요? '3+4*2-5*2/2='라는 사칙연산에서 앞에서부터 그냥 계산할까요? 우선 순위를 두어 계산을 할까요? 물론 초등 학교 때 이 규칙을 배웠습니다. 명확히 계산하는 순서가 있고, 이 알고리즘에 의하면 어떤 사람이 풀어도 답은 같게 나옵니다. 이렇게 수학 문제 푸는 방법도 알고리즘이 될 수 있습니다.


수학문제풀이 알고리즘예


이외에도 생활 속 알고리즘은 너무나 많습니다.

밥하는 방법, 딱지 접는 방법, 비행기표 예약하는 방법, 게임에서 이길 수 있는 방법 등등...


  알고리즘을 표현하는 여러 가지 방법을 알아봅시다.

알고리즘을 표현하는 방법은 아주 많습니다. 말로 표현하거나 화살표로 표현해도 되고, 그림이나 번호로 표현될 수도 있습니다. 절차나 방법을 표현하기 위해서는 많은 방법들을 사용할 수 있습니다. 그 중에 순서도라고 하는 표현 방법도 있습니다.



순서도의 이해와 표현


  순서도란? 

미리 약속된 기호를 이용하여 알고리즘을 표현한 그림, 프로그램이 실행되는 순서를 그림으로 표현한 것입니다.


  순서도 예 - 자판기 순서도 (자판기에서 음료수를 뽑을 때)

문제) 주인이 로봇에게 자판기에서 음료수를 뽑아오라고 시켰습니다. 로봇이 주인님에게 돈을 받아가지고 자판기 앞으로 갔습니다. 그 이후부터 로봇의 동작을 순서도로 표현해 보려고 합니다. 처음부터 하려면 어려우니 틀린 곳을 찾아볼까요?


☞ 로봇, 음료수 좀 뽑아와!


자판기 알고리즘 순서도 수정하기


위의 순서도를 잘 보면 기호는 뭔지 몰라도 순서가 이상합니다. 위에서 사용된 기호는 그대로 두고 순서를 잘 조정하고, 빠진 것이 있으면 추가해 봅니다. 버튼부터 누르지 않고 자판기에 돈부터 넣어야 합니다. 그리고 돈을 넣기 전에 원하는 음료수가 있는지 살펴봐야 합니다. 원하는 음료수가 있으면 돈을 넣고 돈이 충분하면 버튼을 눌러 음료수를 뽑을 수 있습니다. 그리고 돈이 충분하지 않으면 충분할 때까지 계속 넣어 주어야겠습니다. 100원, 200원, 300원.. 이렇게 말입니다. 그리고 잔돈이 남으면 꺼내야 하는 과정도 빠져 있습니다. 아래와 같이 작성하면 됩니다. 물론 훨씬 자세하게 작성하는 것이 좋습니다. 구체적인 동작까지도요.


자판기 알고리즘 순서도 표현


로봇이 자판기 앞에 섰을 때, 먼저 주인님이 뽑아오라고 한 음료수가 있는지 살펴봐야 합니다. 살펴본 후 없으면 다른 자판기로 이동합니다. 만약 있으면 동전을 넣습니다. 만약 동전을 100원 넣었으면 투입된 동전이 충분하지 않으면 다시 동전을 넣습니다. 동전을 음료수 값만큼 넣었으면 버튼을 누릅니다. 그리고 음료수가 나오면 꺼냅니다. 거스름돈이 있는지 보고 있으면 꺼내는 동작까지의 순서도 입니다.


  순서도 기호

그럼 위의 순서도를 보고 순서도 기호의 의미를 연결해 봅니다.

시작과 끝 기호는 순서도 시작과 끝기호 이며, '원하는 음료수가 있는가?', '투입된 동전은 충분한가?' 와 같이 '예','아니오'로 될수 있는 비교판단 기호는 순서도 비교판단기호 입니다. '버튼을 누른다'와 같이 명령어 자료의 처리는 자료의 처리 순서도기호 이고, '넣는다', '꺼낸다','나온다'와 같이 입출력을 나타내는 기호는 자료의 입출력 순서도 기호 입니다.

순서도기호


순서도 시작과 끝기호 : 순서도의 시작과 끝의 의미하는 기호로 '단말'이라고 합니다.

자료의 처리 순서도기호 : 직사각형 표시는 계산 등 다양한 '자료의 처리'를 의미합니다.

순서도 비교판단기호 : 마름모 표시는 조건에 따라 '예', '아니오'를 선택하여 이동하는 '비교 판단' 기호입니다

자료의 입출력 순서도 기호 : 평행사변형 표시는 자료의 입력과 출력을 나타내는 '입출력' 기호입니다.

화살표 기호는 자료의 흐름 즉, 순서도의 흐름을 나타냅니다.


자판기에서 음료수를 구입하는 과정에서는 '거스름 돈이 있는가?'와 같이 조건을 물어 판단해야 하는 상황에서는 마름모 모양으로 표현합니다. 그래서 'yes'인 경우와 'No'인 경우 다른 곳으로 분기되어 실행되는 것입니다. '버튼을 누른다'는 명령어에 따른 처리입니다. 버튼을 누르는 행동을 처리해야 하는 것입니다. 그래서 직사각형 모양 '자료의 처리에 해당합니다. 그리고 '동전을 넣는다, 음료수가 나온다'와 같은 경우에는 자료의 입력 즉, 동전을 Input으로 받아들여 결과적으로 음료수가 Output으로 나오는 동작이므로 '자료의 입출력'에 해당합니다. 시작 기호로 시작을 알리고 끝기호로 동작을 마무리 합니다. 그리고 자료의 흐름은 화살표로 순서대로 표현하면 됩니다.


그러면 이번에는 자판기 속을 들여다 볼까요? 자판기 속 프로그램은 어떻게 돌아가는 것일까요?

☞ 실제 자판기에서 음료수가 어떤 과정을 거쳐 나오게 되는지 생각해 보고 순서도로 작성해 봅니다


먼저, '동전이 들어왔는가?' 부터 시작이라고 하면 동전이 들어오면 그 동전이 음료수를 구입하기에 충분한 양인지 보고 돈이 충분하게 들어오지 않았으면 돈이 들어올 때까지 기다려야 합니다. 충분한 양이면 음료수 구입 버튼을 불을 켜주게 됩니다. 버튼이 눌러졌으면 해당되는 음료수를 내보내야 합니다.

이 과정을 순서도로 표현한다면 어떻게 될까요? 다음 포스팅에..

이 글을 공유하기

댓글

Designed by JB FACTORY