白駿11507号:カードセット




問題の説明

  • カードの情報は文字列として入力されます.
  • が同じカードを持っている場合、「GRESKA」が出力されます.
  • 同じカードがない場合は、不足しているカード数を形状ごとに出力する必要があります.
  • 方法

  • カードの1つの情報の長さは3です.文字列を3つに分割すると、リストからすべてのカードが得られます.
  • 冗長カードが存在するかどうかは、set()を参照してください.set(List)は、リスト内の唯一の要素である집합 자료형を返します.
  • リストに重複するカードがない場合、リストの値はコレクションの値と同じです.
  • 완벽한 세트-내가 가진 카드=잃어버린 카드.
  • 正解

    s = input()
    #s를 3개씩 잘라 lst에 담습니다
    lst = []
    for i in range(0,len(s)-2,3):
        lst.append(s[i:i+3])
    
    
    #똑같은 카드가 존재하는지 확인합니다
    if len(set(lst)) != len(lst):
        print("GRESKA")
    else: #똑같은 카드가 존재하지 않으면
        #모든 카드 - 내가 가진 카드 = 잃어버린 카드
        answer = {"P":13,"K":13,"H":13,"T":13}#모든 세트가 온전할 경우입니다 
        for l in lst:
            card_shape = l[0] #l[0]은 카드의 모양을 나타냅니다
            answer[card_shape]-=1

    その他


    内蔵関数wrapを使用して
  • 文字列sを個数に切断することもできます.
  • from textwrap import wrap
    lst = wrap(s,num)
  • にゼロビットカード情報がない場合は、このコードを使用して問題を解決できません.
  • isalpha()によって文字と数字を決定し、文字列に基づいてs全体を区切ることができる.
  • では、より効率的なコードが思いつかないので、文字のインデックスを保存し、インデックスで値を除算するコードを書きました.
  • s = "A1B22C3333D44444444"
    idx = []
    for i in range(len(s)):
        if s[i].isalpha():
            idx.append(i)
    idx.append(len(s))
    
    lst = []
    for i in range(len(idx)-1):
        lst.append(s[idx[i]:idx[i+1]])
    print(lst)