[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