• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

주사위 게임 코드리뷰 부탁드립니다(의문점도 있습니다)

21.05.11 15:42 작성 조회수 224

0

#주사위 게임
'''
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게
임이 있다.
규칙(1) 같은 눈이 3개가 나오면 10,000원+(같은 눈)*1,000원의 상금을 받게 된다. 
규칙(2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)*100원의 상금을 받게 된다. 
규칙(3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)*100원의 상금을 받게 된다. 
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3*100으로 계산되어 1,300원을 받게 된
다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2*1,000 으로 계산되어 12,000원을 받게 된다. 
3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6*100으로 계산되어 600원을 상금
으로 받게 된다.
N 명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램
을 작성하시오
'''
import random

n = int(input("몇명에서 게임을 진행하나요:  "))
numArr= [1,2,3,4,5,6#주사위로 나올수있는 수 배열 생성
maxMoney = 0 #가장 많은 상금넣어줄 변수


for i in range(n):
    temp = [] #주사위로 나온 수를 넣어줄 변수
    for x in range(3):
        temp.append(random.choice(numArr)) #주사위로 나올숫자를 랜덤으로 받음
    temp.sort() #정렬해줌 max값 찾기 편하게
    abc = map(inttemp)
    
    if a == c : #정렬 되어 있으니까 (a == c)가 같으면 (a == b and b == c) 이의미이므로 (a == c)로 구현
        money = 10000 + a * 1000
    elif a == b or b == c# 정렬되어 있으므로 2가지값이 같은경우만 구현
        money = 1000 + b * 100
    else# 나머지 다다른경우!
        money = c * 100
    
    if money > maxMoney:
        maxMoney = money
    else:
        continue

print(f"가장 많이 받은 상금액수는: {maxMoney}원 입니다.")
    

이렇게 구현하였는데 혹시 더 좋은 방법이 있을까요?
의문점: 처음 if else 구문으로 전부다 같은경우 2가지만 같은경우 다 다른경우 구현하는 부분에서
강사님이 2가지 같은 수 구하는 구문에서 a==b or a == c 이렇게 하셨는데 정렬되어 있는 상태에서
a == c 가같은경우는 3가지가 다 같은숫자아닌가요?
ex) 2 5 3 이렇게 입력되어있어도 정렬되면 2 3 5 이렇게 되니까 a == c랑 같은경우는 2 2 2 이런경우의수밖에
없지않나요?
*항상 좋은강의 잘듣고있습니다 감사합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요^^

네 잘 하신 코드입니다.

그리고 정렬이 되어 있으니 a==c이면 세개가 모두 같다로 하는게 더 좋은 방법입니다. 

한규원님의 프로필

한규원

질문자

2021.05.14

감사합니다 ㅎㅎ