📜 문제


BOF 1316번, 그룹 단어 체커

🔥난이도🔥


image

1차 풀이 ⭕


입력된 단어 중에 그룹 단어를 찾는 문제다.

그룹 단어는 aanb와 같이 각각의 알파벳이 연속된 단어이고, aabna와 같이 연속되지 않은 알파벳이 있으면 그룹 단어가 아니다.

단어에 있는 각 알파벳의 첫 번째 인덱스와 마지막 인덱스를 이용해 그룹 단어인지 파악하는 방법으로 문제를 풀었다.

  1. 입력받은 단어를 set() 함수로 중복 제거 (각 알파벳이 1개씩 남는다.)

  2. 알파벳의 첫 번째 인덱스와 마지막 인덱스 계산

  3. 첫 번째 인덱스와 마지막 인덱스까지의 길이와 알파벳의 수를 비교

그룹 단어인 경우 check +1

testaaaa에서 a의 첫 번째 인덱스는 4, 마지막 인덱스는 7이다.
7 - 4 + 1 = 4로 첫 번째와 마지막 인덱스까지의 길이가 4이고 a의 개수도 4이기 때문에 a가 모두 연속 알파벳이라는 것을 알 수 있다.

그룹 단어가 아닌 경우 내부 for 문 종료

testaaaaba에서 a의 첫 번째 인덱스는 4, 마지막 인덱스는 9이다.
9 - 4 + 1 = 6으로 첫 번째와 마지막 인덱스까지의 길이가 6이고 a의 개수는 5이기 때문에 a가 모두 연속되지 않는 것을 알 수 있다.

코드

import sys

N = int(input())    # 단어의 개수

sum = 0

# 단어의 개수만큼 반복
for _ in range(N):
    # 단어 입력
    group_word = sys.stdin.readline().rstrip()
    check = 0       # 그룹 단어 체크 변수
    # 단어에 존재하는 알파벳 종류 별 반복
    for i in set(group_word):
        # 첫 번째와 마지막 인덱스 위치
        first_index = group_word.find(i)
        last_index = group_word.rfind(i)
        # 마지막 인덱스 - 첫 번째 인덱스 + 1 = 연속된 알바벳의 수
        # 연속된 알파벳 수와 카운트된 알파벳 수가 다르면 내부 for 문 종료
        if last_index - first_index + 1 != group_word.count(i):
            break
        check += 1
    # 그룹 단어 체크 변수와 알파벳의 종류 수가 같으면 그룹 단어 수 증가
    if len(set(group_word)) == check:
        sum += 1

print(sum)

결과

image

현재 티어 🥈


image