[백준] 1316번 : 그룹 단어 체커- 파이썬[Python]

    728x90

    문제

     

    1316번: 그룹 단어 체커

    그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

    www.acmicpc.net

     

    풀이

    T=int(input())
    check_list=[] #나왔던 글자 넣는 리스트
    check=0 #그룹 단어인지 체크 (1=그룹단어 0=그룹단어x)
    cnt=0 #그룹 단어 숫자 세기
    for i in range(T):
      dan=list(input())
      check_list.append(dan[0]) #첫번째 글자 먼저 리스트 삽입
      if len(dan)>1:#단어가 한 글자가 아닐 경우
        for i in range(1,len(dan)): #두번째 글자부터 끝까지 탐색
          if dan[i]==dan[i-1]: #전 글자와 같은 글자일 경우 ->연속글자
            check_list.append(dan[i])#나왔던 글자 넣는 리스트에 해당 글자 삽입
            check=1#그룹 단어 처리 
          elif dan[i]!=dan[i-1] and (dan[i] in check_list): 
            #전글자와 연속이 아닌데, 글자 리스트에 해당 글자 존재할 경우 -> 그룹단어X
            check=0 #그룹단어 X 처리
            break
          elif dan[i]!=dan[i-1] and (dan[i] not in check_list): 
            #연속글자가 아니고, 떨어져 나타난 적 없을 경우
            check_list.append(dan[i]) #나왔던 글자 리스틑 삽입
            check=1 #그룹단어 처리
      elif len(dan)==1: #단어가 한글자이면 무조건 그룹 단어
        check=1 #그룹단어 처리
      check_list=[] #리스트 초기화
      cnt=cnt+check #for문 끝나고 그룹단어 1 유지하면 그룹단어 -> cnt에 추가
      check=0 #check 초기화
    
    print(cnt)

    알고리즘 설명:

    1. 단어가 한 글자일 경우 1 나오게 처리

    2. 단어가 여러 글자일 경우 단어를 한글자씩 탐색하면서 나왔던 글자 리스트에 삽입

    3. 연속으로 같은 글자면  check = 1 유지

    4. 연속으로 같은 글자 X면서 나왔던 글자리스트에 해당 글자가 존재 check=0 하고 break -> 그룹단어 X

    5. 연속으로 같은 글자 X면서 나왔던 글자리스트에 해당 글자가 미존재 check =1 유지

    6. for문 루프가 끝났을때 check =1이 유지되면 그룹단어로 cnt에 추가하여 그룹단어 숫자세기

     

    댓글