[python] 백준 1316 : 그룹 단어 체커

728x90

[python] 백준 1316 : 그룹 단어 체커

난이도 : 실버 5

분류 : 구현, 문자열


ccazzzzbb는 c, a, z, b가 연속해서 나타나고

kin 은 k, i, n이 연속해서 나타나므로 이들을 그룹 단어라고 할 수 있다.

그러나 aabbbccb는 b가 떨어져서 나타나므로 그룹 단어가 아니다.

 

 

k i i n d는 연속이지만 k i i n i는 연속이 아니다.

ki

kiii

kiiiii 모두 연속인 상황이지만

n다음에 다시 i가 나오면 그룹 단어가 아니게 된다.

 

반복문을 사용해 kiind라는 단어를 순회하고 있다고 가정하자.

k   i   i   n   d

0   1  2  3   4

2번과 3번 인덱스의 글자가 달라졌다는 것은 i의 연속이 끊어졌음을 의미한다. 만약 3번부터 맨 끝까지의 문자열에서 i가 또 등장한다면 그룹 단어가 아니게 된다.

 

따라서 현재 위치하고 있는 인덱스의 문자와 다음 인덱스의 문자가 다를 때, 남아있는 나머지 문자열에서 현재 위치하고 있는 인덱스의 문자가 나타나면 그룹 단어가 아닌 것으로 판단하도록 코드를 짜면 된다.

 

코드

N = int(input())
cnt = 0
lst = []
for i in range(N):
    lst.append(input())

for i in lst:
    error = 0
    for j in range(len(i)-1):
        if i[j] != i[j+1]:
            lst2 = i[j+1:]
            if i[j] in lst2:
                error += 1
    if error == 0:
        cnt += 1

print(cnt)

코드 풀이

for i in lst:
    error = 0
    for j in range(len(i)-1):
        if i[j] != i[j+1]:
            lst2 = i[j+1:]
            if i[j] in lst2:
                error += 1

여러 개의 문자열 중에 하나의 문자열을 i로 잡을 때, i의 각 문자들에 대해 반복문으로 접근한다.

len(i)-1인 이유는 그 밑에 있는 조건문에서 i[j+1]로 잡았기 때문에 len(i)로 범위를 잡으면 인덱스가 범위를 초과하게 된다.

 

2번과 3번 인덱스의 값이 다를 때 i[j+1:]을 이용해 3번부터 나머지 모든 원소들을 구성요소로 하는 새로운 리스트 

lst2를 생성한다.

만약 2번 인덱스 값 i가 lst2안에 존재한다면 불연속적으로 i가 등장한 것이므로 그룹 단어가 아니게 된다.

error가 0인 경우는 단어가 연속으로 존재하는 그룹 단어이므로 cnt를 증가시키고 반복문을 빠져나왔을 때 cnt 값을 출력할 수 있도록 한다.

728x90