Codejam2022 Round1A: Double or One Thing

문제.


Uppercase에 대한 영어 문자열을 제공합니다.텍스트를 강조 표시할 때 얻을 수 있는 새 문자열 중 사전 순서로 가장 먼저 나타나는 문자열을 구합니다.예를 들어 HELLOWORLD에서 H, L, O, L을 강조 표시하면 HHELLOWOLD와 같은 문자의 강조 부분이 두 번 추가됩니다.
https://codingcompetitions.withgoogle.com/codejam/round/0000000000877ba5/0000000000aa8e9c

계산법


강조 표시된 문자를 다음과 같이 결정합니다.
  • 인접한 문자 s와 t로 s
  • s&t의 경우 s는 강조 표시되지 않습니다.강조 표시하면 사전 순서대로 커집니다.
  • 이것은 s=t일 때 결정할 수 없다.s>u 또는 s입력 문자열을 같은 문자열의 블록으로 보고 서로 인접한 서로 다른 문자열 s와 t를 비교합니다.예를 들어 BOOKKEEPER라면 [(B,1),(O,2),(K,2),(E,2),(P,1),(E,1),(R,1)]로 B와 O를 비교할 수 있다. B는 O이기 때문에 B는 고광, O와 K를 O&K로 비교하기 때문에 불고광을 결정할 수 있다.또한 E와 P를 비교하면 E

    이루어지다


    문자열을 입력하는 사전 처리는itertools의 그룹by를 사용합니다.
    def counts(S):
        import itertools
        return [(label, len(list(group))) for label, group in itertools.groupby(S)]
    
    
    T = int(input())
    for t in range(1, T + 1):
        S = input()
        s_counts = counts(S)
        res = []
        for i in range(len(s_counts)):
            if i < len(s_counts) - 1 and s_counts[i][0] < s_counts[i+1][0]:
                res.extend([s_counts[i][0] for _ in range(s_counts[i][1] * 2)])
            else:
                res.extend([s_counts[i][0] for _ in range(s_counts[i][1])])
        print('Case #{}: {}'.format(t, ''.join(res)))
    

    좋은 웹페이지 즐겨찾기