[Python] 코딩 도장 - 배스킨라빈스 31게임

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 배스킨라빈스 31게임] - Lv.1

게임규칙

게임의 참여자들은 차례를 정해 1부터 31까지의 수를 순차적으로 부른다.

한번에 1~3개까지 수를 연달아 부를 수 있으며, 마지막 31을 부른 사람이 진다.

  • 컴퓨터가 무조건 먼저 시작하고,1P는 무조건 2번째로 말한다.컴퓨터가 무조건 이기게 만들어라.

  • LEVEL1 예상

  • 힌트1:4n-2라는 공식을 사용하면 됩니다.

  • 힌트2:이 게임은 31을 부르면 지는 게임이니 30을 부르면 이깁니다.

출처: https://codingdojang.com/scode/700?answer_mode=hide


[풀이]

def baskin():
    n = 1
    
    while 4*n-2 < 30:
        if n==1:
            print("1P:", [1,2])
    
        me = list(map(int, input("2P: ").split(",")))
    
        n += 1
        print("1P:", list(range(me[-1] + 1, 4*n-2+1)))
    
    
baskin()
1P: [1, 2]
2P: 3
1P: [4, 5, 6]
2P: 7, 8
1P: [9, 10]
2P: 11, 12, 13
1P: [14]
2P: 15
1P: [16, 17, 18]
2P: 19
1P: [20, 21, 22]
2P: 23
1P: [24, 25, 26]
2P: 27
1P: [28, 29, 30]

배스킨라빈스 게임은 4n-2 공식에 따라 2, 6, 10 … 을 먼저 말하면 질 수 없다.

컴퓨터가 처음 1,2를 말하기 때문에 그 후 내가 몇 개의 숫자를 입력하던 4n-2의 숫자까지 말하게 코드를 짰다.

다만 while문 조건이나 입력 시 3개 이상 숫자를 적거나 뜬금없는 숫자를 적는 등에 대한 예외 처리는 하지 않았다.


[추천 풀이]

print("=="*5 + "베스킨라빈스31 게임을 시작합니다."+"=="*5)
print("COM : 1!\nCOM : 2!")

num = 2
a = 1

while num <30 : 
    a = 1
    ans = 0
    while ans != "n":
        num += 1        
        ans = input("YOU : {0}! (총 3번중 {1}번 말씀하셨습니다. {2}번 더 말할수 있어요.) 숫자 {3}을(를) 말씀하시겠습니까? (y/n)".format(num, a, 3-a, num+1))
        while ans !="y" and ans !="n" :
            ans = input(" 답변오류, y 또는 n 을 입력하세요")
        a += 1
        if a >= 3 and ans == "y":
            num += 1
            print("YOU : {0}! (COM 턴으로 넘어갑니다)".format(num))
            ans = "n"


    while num % 4 !=2 : 
        num += 1
        print("COM : {0}!".format(num))

print("YOU : 31! 내가졌네요.")
==========베스킨라빈스31 게임을 시작합니다.==========
COM : 1!
COM : 2!
YOU : 3! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 4을(를) 말씀하시겠습니까? (y/n)ㅛ
 답변오류, y 또는 n 을 입력하세요y
YOU : 4! (총 3번중 2번 말씀하셨습니다. 1번 더 말할수 있어요.) 숫자 5을(를) 말씀하시겠습니까? (y/n)n
COM : 5!
COM : 6!
YOU : 7! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 8을(를) 말씀하시겠습니까? (y/n)n
COM : 8!
COM : 9!
COM : 10!
YOU : 11! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 12을(를) 말씀하시겠습니까? (y/n)n
COM : 12!
COM : 13!
COM : 14!
YOU : 15! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 16을(를) 말씀하시겠습니까? (y/n)n
COM : 16!
COM : 17!
COM : 18!
YOU : 19! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 20을(를) 말씀하시겠습니까? (y/n)n
COM : 20!
COM : 21!
COM : 22!
YOU : 23! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 24을(를) 말씀하시겠습니까? (y/n)n
COM : 24!
COM : 25!
COM : 26!
YOU : 27! (총 3번중 1번 말씀하셨습니다. 2번 더 말할수 있어요.) 숫자 28을(를) 말씀하시겠습니까? (y/n)n
COM : 28!
COM : 29!
COM : 30!
YOU : 31! 내가졌네요.

문제 푸는 방법이야 당연히 비슷하지만 좀 더 정성스럽게 푸신 분이 있어서 가져왔다.

그리고 나는 iter의 숫자로 while문을 작성했다면 이 분처럼 말하는 숫자 자체로 작성한 것이 좋아 보인다.

Leave a comment