지나가던 개발자
[Python] 백준 1316번(그룹 단어 체커) 문제 풀이 본문
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번째 요소로(단, i≠0 그리고 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는 ""로 표현된다.
따라서, 실제 리스트의 길이를 비교할 때 코드에서는 리스트 중 ""를 없앤 길이만을 비교해야 한다.
'PS > Python' 카테고리의 다른 글
[Python] 백준 9251번(LCS) 문제 풀이 (0) | 2022.10.10 |
---|---|
[Python] 백준 11719번(그대로 출력하기 2) 문제 풀이 (0) | 2022.10.10 |
[Python] 백준 1759번(암호 만들기) 문제 풀이 (0) | 2022.10.09 |
[Python] 백준 2877번(4와 7) 문제 풀이 (0) | 2022.10.07 |
[Python] 백준 11718번(그대로 출력하기) 문제 풀이 (1) | 2022.09.25 |
Comments