본문 바로가기
백준

[백준] 1316번 : 그룹 단어 체커 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 2.
728x90
반응형

 

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. 전체 테스트 케이스의 개수를 입력받는다. N = int(input())
  2. 그룹 단어의 개수를 세어줄 변수를 생성하고 초기화한다. count = 0
  3. 전체 테스트 케이스 횟수만큼 반복한다. for _ in range(N)
  4. 각 테스트 케이스 별로 그룹 단어를 판별할 문자열을 입력받는다. word = input()
  5. 입력받은 문자열을 단어로 분리해 저장할 리스트를 생성한다. li = list()
  6. 각 문자별 횟수를 저장할 딕셔너리를 생성한다. d = dict()
  7. 입력받은 문자열의 문자를 각각 추출한다. for i in word
  8. 만약 추출한 문자가 딕셔너리에 있으면 if (i in d)
  9. 딕셔너리 값을 1 증가시킨다. d[i] += 1
  10. 반면에 추출한 문자가 처음이면 else
  11. 딕셔너리에 추가하고 값을 1로 만들어준다. d[i] = 1
  12. 매번 추출한 문자는 리스트에 추가한다. li.append(i)
  13. 그룹 단어인지 판별할 변수를 생성하고 True로 초기화한다. state = True
  14. 딕셔너리의 키를 하나씩 추출한다. for i in d.keys()
  15. 문자열의 인덱스를 저장해 줄 리스트를 생성한다. res = list()
  16. 딕셔너리 키의 값만큼 반복한다. for _ in range(d[i])
  17. 문자를 저장한 리스트에서 추출한 딕셔너리 값의 인덱스를 찾아 그 값을 추가한다. res.append(li.index(i))
  18. 추가한 인덱스 위치의 값을 다음 인덱스 위치를 찾기 위해 0으로 바꿔준다. li[li.index(i)] = '0'
  19. 인덱스 값을 저장한 리스트의 길이가 2보다 크면 if (len(res) >= 2)
  20. 각 값별로 차이를 구하기 위해 리스트의 길이보다 1 작은 횟수만큼 반복한다. for i in range(1, len(res))
  21. 만약 인접한 리스트의 두 원소의 값 차이가 1이 아니면 if (res[i] - res[i - 1] != 1)
  22. 중복된 문자가 떨어져 있다는 뜻이므로 그룹 단어가 아니다. state = False
  23. 그룹 단어가 아닌 것으로 판별되었으므로 반복문을 종료한다. break
  24. 딕셔너리의 모든 키에 대한 반복문을 마치고 만약 그룹 단어라고 판별되면 if (state)
  25. 그룹 단어의 개수를 1 증가시킨다. count += 1
  26. 모든 테스트 케이스에 대해 판별이 끝나면 그룹 단어의 개수를 출력한다. print(count)
반응형

3. 소스코드

N = int(input())

count = 0
for _ in range(N):
    word = input()

    li = list()
    d = dict()
    for i in word:
        if (i in d):
            d[i] += 1
        else:
            d[i] = 1

        li.append(i)

    state = True
    for i in d.keys():
        res = list()
        for _ in range(d[i]):
            res.append(li.index(i))
            li[li.index(i)] = '0'

        if (len(res) >= 2):
            for i in range(1, len(res)):
                if (res[i] - res[i - 1] != 1):
                    state = False
                    break

    if (state):
        count += 1

print(count)
728x90
반응형