[백준알고리즘/python3,파이썬] 1316번 그룹 단어 체커 문제 및 해결 소스코드

백준알고리즘 2020.12.18 댓글 임통끼
728x90

 


백준알고리즘 / No.1316 / 그룹 단어 체커 / python3, 파이썬


 

문제

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다. 

 

출력

첫째 줄에 그룹 단어의 개수를 출력한다.

 

예제

4

aba

abab

abcabc

a

 

예제 출력 값

1


해결 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import collections
import itertools
 
test = int(input())
result_list = []
div_list = []
group_count = 0
 
if test > 0 and test <= 100 :
    for count in range(0, test) :
        answer = input().lower()
        answer2 = itertools.groupby(answer)
        result_list.append("".join(k for k, v in answer2))
 
    for count2 in range(0len(result_list)) :
        del div_list[:]
 
        for count3 in range(0len(result_list[count2])):
            div_list.append(result_list[count2][count3])
 
        co = collections.Counter(div_list)
        co = max(list(co.values()))
 
        if co == 1 :
            group_count = group_count + 1
 
    print(group_count)
cs

사용된 모듈 : collections, itertools

 

처음에는 문제만 보고 이해가 잘 안갔는데, 예제 입력과 출력 부분을 보니깐 이해가 되었다. 부족하지만, 해당 코드에 대해 해설을 해보자한다.

 

line 4 : 단어 개수를 입력받는 부분. 해당 숫자에 따라 입력받아지는 단어의 갯수가 달라진다.

line 9 : 길이는 최대 100이라는 조건을 명시 했기 때문에, if문을 통해서 입력받은 갯수의 숫자를 확인한다.

line 10 : 입력받은 단어 개수만큼 검사를 해야하기 때문에 for문과 range를 사용

line 11 : 알파벳이 소문자로만 되어있다는 조건이 있기 때문에 lower()을 사용하여 입력받은 단어를 소문자로 변형한다.

line 12 : itertools의 groupby를 사용하여 해당 문자열을 묶어준다. 그 후 result_list에 append한다.

line 15 : result_list의 범위만큼 검사하기 위해 for문과 range를 사용

line 21 : div_list를 Counter로 알파벳별로 갯수를 카운팅한다.

line 22 : 카운팅한 데이터를 리스트화하여 max를 통해 최대값을 추출한다.

line 24~25 : 만약 그룹화한 알파벳의 카운트가 1이라면 해당 단어는 그룹단어임을 인지하고, group_count 변수를 1증가

line 27 : 그룹단어의 개수를 출력한다.


결과

이 문제는 잘 기억은 안나지만, 해결이 되지 않아서 어느정도 서치를 했던 기억이 납니다. 아니면 파이썬 공부를 한참 하던 중에 코드를 짰던 것 같기도 하고 .. 그래서 해설이 굉장히 허접하거나 문제가 있을수도 있답니다! (뭐 백준에서 돌아기기만 하면 문제없겠지..)

갈수록 느끼는거지만 파이썬은 아마 시간제한으로 인해서 실패되는 경우가 상당히 있을 것 같다..^^..

 

 

반응형

댓글