Stage 1 - 알고리즘이란 무엇인가?

이번 시간을 통해 우리는 야구 게임을 만들어봅니다. 본격적으로 코딩을 하기 전에 우리가 무엇을 만들어야 하는지 정의내리는 것은 중요합니다. 알고리즘의 개념에 대해 배우고, 야구 게임의 알고리즘을 그려봅니다.

야구 게임이 뭐에요?

야구 게임

학창 시절 한번쯤은 해보셨을법한 숫자 야구 게임 기억나시나요? 4자의 숫자를 서로 말하면서 스트라이크, 볼에 대해 판단해서 상대방이 정해놓은 숫자를 맞추는 게임이죠! 중학교 시절 선생님 몰래 했던 기억들이 많이 있는데요. 우리는 이 게임을 파이썬을 이용하여 만들어보도록 합니다.

야구게임

우리가 만들 게임 규칙

원래 학창시절에는 짝궁이랑 서로 각자의 비밀 숫자를 정해놓고 숫자 맞추는 방식으로 진행했는데요. 우리는 짝궁이 아닌 컴퓨터와 야구 게임을 합합니다. 컴퓨터가 우리가 정한 숫자를 맞추도록 대결하면 좋겠지만, 짝궁을 이기기 위한 연습상대로 생각하고, 컴퓨터가 내는 숫자를 일방적으로 맞추기만 합니다.

우리가 만들 야구 게임

규칙에 대해 명확하게 설명드리겠습니다.

  • 사용자가 4개의 숫자를 입력합니다.

  • 4개의 숫자 중 자리와 수가 일치하면 Strike이 됩니다.

  • 4개의 숫자 중 자리는 일치하지 않지만, 수가 포함되어 있다면 Ball이 됩니다.

  • 4개의 숫자가 모두 없다면, Out이 됩니다.

  • 4 Strike 되면 게임이 종료됩니다.

# 정답 1234
입력 : 1209 # 2 스트라이크!
입력 : 7890 # 아웃!
입력 : 1389 # 1 스트라이크 1볼!
입력 : 4321 # 4볼!
입력 : 1234 # 4 스트라이크! 게임 종료!

알고리즘이란?

알고리즘이란 무엇인가

우리는 게임을 만들기 이전에 어떻게 만들지 큰 계획을 먼저 세우고, 코딩을 시작합니다. 코딩을 하기 전에 미리 설계를 하는 행위는 매우 중요합니다. 설계를 함으로써, 막무가내로 코딩을 하지 않게 되고, 오류도 줄일 수 있게되고, 더 빠르게 만들어 낼 수 있습니다.

계획을 짜기 위해서 알고리즘이란 개념에 대해 간단히 알아보겠습니다. 알고리즘은 '문제를 해결하는 방법'입니다. 미로 찾기, 번호를 오름차순으로 세우기 등 문제들을 해결하는 방법론입니다. 우리는 특정한 알고리즘 방법에 대해 배우지는 않지만, 야구 게임이란 문제를 해결해야 하기 때문에 미리 설계하며 방법을 찾아내야 합니다. 이를 위해 우리는 순서도를 그려보도록 합니다.

순서도 그리기

아래는 우리가 만들 야구 게임의 순서도입니다. 코딩을 하기 전부터 아래와 같이 그리는 것은 사실상 불가능한 일입니다. 그래서 우리는 전체적인 흐름을 파악하고 간단한 순서도 작성해서 코딩을 해봅니다.

야구 게임의 순서도

자 이제 코딩을 한다고 빙의하시고요. 무엇부터 코드를 입력할지 생각해보세요! 바로 코딩하지 마시고요. 우리가 Challenge 때처럼 먼저 상상해보세요!

우선은 컴퓨터가 문제를 출제하여야 한다고 생각해요! 그리고 사용자가 맞추는 작업을 해야할테고, 그것을 검사해야겠죠?! 그 다음에 4 스트라이크이면 게임을 종료하고 아니면 다시 반복해야겠네요!

그러면 아래와 같이 간단하게 그릴 수 있겠어요!

야구 게임의 간단한 순서도

이 정도를 이해하셨다면, 아래의 자세한 알고리즘을 살펴보아요!

야구 게임 알고리즘

문제 출제와 입력 받기

Stage 2를 통해서 아래의 내용을 코딩합니다. 지난 3주차 때 만들었던 로또 발생기를 응용하시면 금방 만들 수 있다고 생각합니다! 난수를 생성해서 정답 리스트에 있는지 없는지, 중복 여부에 대해 파악하고요. 없으면 리스트에 추가합니다. 그래서 4자리 숫자가 될 때 까지 반복해서 리스트를 만들면 되겠죠!

문제 출제와 입력 받기

스트라이크! 볼! 아웃! 판별

야구 게임의 가장 핵심 적인 부분이라고 생각해요! 스트라이크와 볼을 판별하는 것 인데요. 사용자가 입력한 숫자를 모두 탐색해야 하니까 4자리의 수만큼 즉, 4번을 반복해서 스트라이크와 볼을 판별해주어야 합니다. 모든 판별이 끝난 후에는 판별 결과를 출력해야 하는데요. 스트라이크와 볼이 모두 0이면 OUT을, 둘 중 하나라도 0이 아니라면 정보를 출력해서 알려주어야 합니다.

스트라이크 볼 아웃 판별하기

반복적인 시행

마지막으로 사용자가 4 스트라이크가 나올 때 까지 사용자로부터 입력받는 부분에서 판별하는 부분까지 반복해주어야 합니다. 또한 반복이 이루어 질 때, 사용자가 입력한 횟수를 세어 결과적으로 몇 번 만에 맞추었는지 알려주어야 합니다.

반복적으로 시행하기

조건문과 반복문을 적절히 이용해야 합니다. 순서도에서 마름모는 조건문을 의미하고요. 역방향으로 올라가는 화살표는 반복문을 의미합니다.