Programming/Python

[백준/python3] 1316. 그룹 단어 체커

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)
  1. 문자열 입력 후, 기본 변수들을 세팅한다.
        s = input()
        tmp = s[0]
        group = [tmp]
        flag = 1​
     - 변수 tmp는 값이 연속되는 것을 검사하기 위해 정의한 변수다. 
    - 리스트 group은 tmp, 즉 문자열 내에 1회 이상 등장한 알파벳에 대한 배열이다. (연속될 경우 값 추가할 필요X)
    - flag는 그룹 단어인지 확인하기 위한 변수로, 함수 check()의 리턴값이다. "1"로 초기화해 특별한 경우(그룹 단어가 아닌 경우)에는 0으로 값이 바뀌도록 한다.
  2. 인덱스 값 1부터 문자열을 검사한다.
    	for i in range(1, len(s)):​
  3. 값이 연속되는 경우, 그냥 넘어간다.
            if s[i] == tmp:
                continue​
    s[i]의 값이 tmp와 같은 경우, 즉 바로 전 인덱스의 값과 동일한 경우 continue로 패스한다.
  4. 값이 연속되지 않는 경우에 대한 처리를 진행한다.
            else:
                if s[i] in group:
                    flag = 0
                    break
                else:
                    tmp = s[i]
                    group.append(tmp)​
    - s[i]의 값이 s[i-1]의 값과 동일하지 않지만, group 리스트에 존재하는 값이라면 이는 그룹 단어의 규칙에 어긋나게 된다. 따라서 flag를 0으로 변경하고 break를 통해 for문을 종료한다.
    - s[i]의 값이 s[i-1]의 값과 동일하지 않으며 새롭게 등장한 문자인 경우, tmp의 값을 s[i]로 변경하고 group 리스트에 값을 추가한다.

성공!

SMALL