코딩/matlab

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

비스카이비전 2019. 4. 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번만에 성공했다.

 

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