지나가던 개발자

[Python] 백준 1316번(그룹 단어 체커) 문제 풀이 본문

PS/Python

[Python] 백준 1316번(그룹 단어 체커) 문제 풀이

KwonYongHyeon 2022. 10. 10. 15:40

 

group_word = 0
for i in range(int(input())):
    is_group_word = True
    word = input()
    wordAlphabet = []
    for j in word:
        if j not in wordAlphabet:
            wordAlphabet.append(j)
    if len(wordAlphabet) == len(word) or len(wordAlphabet) == 1:
        group_word += 1
        continue
    for j in range(len(wordAlphabet)):
        if j == 0 or j == len(wordAlphabet)-1:
            if len([x for x in word.split(wordAlphabet[j]) if x != '']) == 1:
                continue
            is_group_word = False
            break
        else:
            if len([x for x in word.split(wordAlphabet[j]) if x != '']) == 2:
                continue
            is_group_word = False
            break
    if is_group_word:
        group_word += 1
print(group_word)

 

이 문제를 푸는 아이디어는 단어를 나누는 것으로부터 시작된다.

 

입력받은 단어(word)가 그룹 단어라면, word의 i번째 요소로(단, i0 그리고 i(word의 길이)-1) word를 나누었을 때, word는 두 개로 나뉠 것이다. 예를 들어, "hello"라는 그룹 단어에서 i가 1~3까지 증가할 때 i로 나뉘어진 word는 i의 증가에 따라 ["h", "llo"], ["he", "o"], ["he", "o"] 이렇게 말이다. 만약 "hlello"와 같이 그룹 단어가 아닌 문자열에서 i가 1이라면 ["h", "e", "o"]와 같이 나뉘어진 결과의 길이가 2가 아닐 것이다.

 

만약 i가 0 혹은 (word의 길이)-1이라면 word의 i번째 요소로 word를 나누었을 때 word는 1개로 나뉠 것이다. 예를 들어, "hello"에서 i가 0일 때는 ["ello"]가 되고, i가 4일때는 ["hell"]이 된다.

 

그런데, 파이썬에서 문자열을 나눌 때에 중복되며 연속된 문자 s가 있고 그 s 중 하나를 기준으로 나누었다 가정하면, split() 메소드를 사용하였을 경우 기준이 된 문자 s를 제외한 나머지 s는 ""로 표현된다.

 

 

따라서, 실제 리스트의 길이를 비교할 때 코드에서는 리스트 중 ""를 없앤 길이만을 비교해야 한다.

Comments