[MATLAB] 야구 게임, 0과 9사이 숫자 3개 맞추기

일과 공부 사이/MATLAB|2019.04.26 18:57

코딩을 배울 때 꼭 나오는 예제 중 하나는 야구 게임이다. 생성된 3개의 난수를 찾아가는 것이다. 자리와 숫자가 같을 때는 스트라이크, 자리는 다르지만 숫자가 같을 때는 볼이다.

 

예를 들어, 생성된 난수가 3 5 9일 때,

 

3 0 2는 1S,

2 3 6은 1B,

3 9 2는 1S 1B이다.

 

이런 식으로 숫자들과 자리를 맞춰가면서 최종적으로 3 5 9를 찾아가는 것이다. 

 

그냥 머리 식힐겸 MATLAB으로 야구 게임을 코딩해보았다. 예전에 C와 파이썬으로 해봤었지만..

아래는 작성한 코드와 실행 결과이다.

clc, clear, close all

num1 = randi(10) - 1; % 0과 9사이의 난수 생성
num2 = num1;
while num2 == num1
    num2 = randi(10) - 1; % 0과 9사이의 난수 생성
end
num3 = num2;
while num3 == num2 || num3 == num1
    num3 = randi(10) - 1; % 0과 9사이의 난수 생성
end

num = [num1, num2, num3]; % 생성된 3개의 난수. 각각 다른 값이며 0에서 9의 값을 갖는다.

s_cnt = 0;
challenge_num = 0;

while s_cnt ~= 3
    challenge_num = challenge_num + 1;
    disp(['<Round ', num2str(challenge_num), '>'])
    
    s_cnt = 0;
    b_cnt = 0;
    
    prompt1 = 'num1:';
    x1 = input(prompt1);

    prompt2 = 'num2:';
    x2 = input(prompt2);

    prompt3 = 'num3:';
    x3 = input(prompt3);
    
    if x1 == num1
        s_cnt = s_cnt + 1;
    end
    if x2 == num2
        s_cnt = s_cnt + 1;
    end
    if x3 == num3
        s_cnt = s_cnt + 1;
    end
    
    if x1 == num2 || x1 == num3
        b_cnt = b_cnt + 1;
    end
    if x2 == num1 || x2 == num3
        b_cnt = b_cnt + 1;
    end
    if x3 == num1 || x3 == num2
        b_cnt = b_cnt + 1;
    end
    
    result = [num2str(s_cnt), 'S ', num2str(b_cnt), 'B.'];
    disp(result)
    disp(' ')
end

disp('The end')
disp(['The number of challenges: ', num2str(challenge_num)])

운 좋게 4번 만에 답을 찾아냈다.

 

이번엔 6번만에 성공했다.

 

남이 짜놓은 코드를 읽고 해석하는 것은 꽤나 스트레스를 주지만, 스스로 코딩해서 어떤 결과를 내는 것은 참 즐거운 일인 것 같다. 

댓글()
  1. TK 2019.04.28 07:11 댓글주소  수정/삭제  댓글쓰기

    보통 책에는 컴퓨터가 랜덤으로 숫자를 생성해서 우리가 맞추는 정도까지가 예제로 나와있는데, 반대로 우리가 숫자를 생각하고 컴퓨터가 맞추게 하도록 구현해봐도 재밌더라구요. '인공지능'이라고 부를 정도로 복잡한 알고리즘이 필요한건 아니라 재미 삼아 도전해보셔도 좋을거같네요 ㅎㅎ