[Python] 숫자 야구: 점수 계산

hanseungjune·2022년 6월 15일
0

Python

목록 보기
37/38


풀이

def get_score(guesses, solution):
    strike_count = 0
    ball_count = 0

    # 코드를 작성하세요.
    i = 0
    while i < len(guesses):
        if guesses[i] in solution:
            if guesses[i] == solution[i]:
                strike_count += 1
            elif guesses[i] != solution[i]:
                ball_count += 1
        i += 1

    return strike_count, ball_count


# 테스트
s_1, b_1 = get_score([2, 7, 4], [2, 4, 7])
print(s_1, b_1)

s_2, b_2 = get_score([7, 2, 4], [2, 4, 7])
print(s_2, b_2)

s_3, b_3 = get_score([0, 4, 7], [2, 4, 7])
print(s_3, b_3)

s_4, b_4 = get_score([2, 4, 7], [2, 4, 7])
print(s_4, b_4)

내가 볼 때는 내 코드가 모범답안보다 길긴해도 초보자들을 위해서는 직관적이라고 생각한다. i를 인덱스로 두고 0 ~ len(guesses)-1 범위로 하여 배열을 비교하는데 먼저 고른 숫자가 컴퓨터가 뽑은 숫자 3개랑 같은 수인지 체크한다. 그리고 같은 인덱스 자리에 숫자끼리 같으면 strike, 다른 인덱스 자리끼리 숫자가 같으면 ball 이라고 칭하면 된다.

모범 답안

def get_score(guesses, solution):
    strike_count = 0
    ball_count = 0

    for i in range(3):
        if guesses[i] == solution[i]:
            strike_count += 1
        elif guesses[i] in solution:
            ball_count += 1

    return strike_count, ball_count

모범 답안 해석은 다음과 같다.
i 는 0~2 의 범위를 가지며, 같은 인덱스 숫자끼리 같으면 strike 로 조건을 둔다. 그리고 바로 elif로 넘어가는데, 이는 guesses[i] != solution[i]의 의미가 포함되면서 guesses[i] 가 solution에 있는 숫자이다라는 뜻으로 해석할 수 있다. 그래서 ball 이다.

profile
필요하다면 공부하는 개발자, 한승준

0개의 댓글