티스토리 뷰

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1. 접근 방식

  • 겹치는 카드가 존재하는지 확인하기 위해 집합을 사용하자.

카드에 대한 정보 s를 문자열로 받고나면, 이것을 3개씩 끊어 [ 'S01', 'D02' ... ]처럼 리스트로 담을 것이다. 그리고 이것을 집합으로 만들어 리스트와 집합의 길이가 서로 다르면, 리스트 내에 중복 요소가 존재한다는 것이므로 ERROR를 출력한다.

 

  • 무늬별 카드 개수는 딕셔너리를 사용하자.

기본적으로 모든 카드가 필요하다는 전제로 초기 딕셔너리의 모든 value는 13으로 설정한다. 이후 s를 3개씩 끊은 리스트를 순회하면서 각 무늬의 value 값을 -1한다. 단, 출력 순서는 S D H C 순서대로 해야 하므로, 딕셔너리의 순서가 유지되어야 한다. 따라서 OrderedDict을 사용해야겠다고 생각했다.

 

 

2. 정답 코드

from collections import OrderedDict

T = int(input())

for test_case in range(1, T + 1):
    s = input()
    cards = [ s[x:x+3] for x in range(0, len(s), 3) ]
    
    if len(set(cards)) != len(cards):
        print(f'#{test_case} ERROR')
        
    else:
        counts = OrderedDict({ 'S': 13, 'D': 13, 'H': 13, 'C':13 })

        for card in cards:
            counts[card[0]] -= 1
        
        print(f'#{test_case}', end=' ')
        for t in counts.values():
            print(t, end=' ')
        print()

 

728x90