728x90
📢 문제 설명
문자열을 입력받고, 해당 문자열이 그룹단어인지 확인한다.
이 때, 그룹 단어는 해당 문자열(단어)에 동일한 알파벳이 1개 이상 존재할 경우, 그 알파벳들을 연속으로 붙어있어야만 한다.
✏️ 코드 풀이
T = int(input())
count = 0
def check():
s = input()
tmp = s[0]
group = [tmp]
flag = 1
for i in range(1, len(s)):
if s[i] == tmp:
continue
else:
if s[i] in group:
flag = 0
break
else:
tmp = s[i]
group.append(tmp)
return flag
for t in range(T):
count += check()
print(count)
- 문자열 입력 후, 기본 변수들을 세팅한다.
- 변수 tmp는 값이 연속되는 것을 검사하기 위해 정의한 변수다.s = input() tmp = s[0] group = [tmp] flag = 1
- 리스트 group은 tmp, 즉 문자열 내에 1회 이상 등장한 알파벳에 대한 배열이다. (연속될 경우 값 추가할 필요X)
- flag는 그룹 단어인지 확인하기 위한 변수로, 함수 check()의 리턴값이다. "1"로 초기화해 특별한 경우(그룹 단어가 아닌 경우)에는 0으로 값이 바뀌도록 한다. - 인덱스 값 1부터 문자열을 검사한다.
for i in range(1, len(s)):
- 값이 연속되는 경우, 그냥 넘어간다.
s[i]의 값이 tmp와 같은 경우, 즉 바로 전 인덱스의 값과 동일한 경우 continue로 패스한다.if s[i] == tmp: continue
- 값이 연속되지 않는 경우에 대한 처리를 진행한다.
- s[i]의 값이 s[i-1]의 값과 동일하지 않지만, group 리스트에 존재하는 값이라면 이는 그룹 단어의 규칙에 어긋나게 된다. 따라서 flag를 0으로 변경하고 break를 통해 for문을 종료한다.else: if s[i] in group: flag = 0 break else: tmp = s[i] group.append(tmp)
- s[i]의 값이 s[i-1]의 값과 동일하지 않으며 새롭게 등장한 문자인 경우, tmp의 값을 s[i]로 변경하고 group 리스트에 값을 추가한다.
SMALL
'Programming > Python' 카테고리의 다른 글
[Algorithm] 병합/합병 정렬 (Merge Sort) (0) | 2022.04.23 |
---|---|
[백준/python3] 1929. 소수 구하기 (에라토스테네스의 체) (0) | 2022.01.20 |
[백준/python3] 1002. 터렛 (0) | 2022.01.09 |
[백준/python3] 2941. 크로아티아 알파벳 (0) | 2022.01.09 |
[백준/python3] 1157.단어 공부 (0) | 2022.01.08 |