본문 바로가기
Problem Solving/boj.kr (Python)

[BOJ / 파이썬] 1316 : 그룹 단어 체커

by hoiiiii 2022. 2. 26.

문제 : https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

Sol )

  1. 문자가 연속적으로 입력된다는 뜻은, 한 번 이상 문자 입력 후 다른 문자가 입력된 다음 다시 나오지 않는다는 뜻
  2. 길이 26의 cnt 배열 (cnt_arr) false로 초기화
  3. result = 0
  4. 단어 입력 횟수만큼 순회하면서 반복문 안에서 flag (그룹 단어인지 여부 확인용 변수)로 활용할 변수 check 선언
  5. 문자열을 순회하면서 cnt 배열의 문자 아스키코드 - 'a' 아스키코드 인덱스 추출
  6. 만약 인덱스가 바뀌면 이전 인덱스 값 true로 변경
  7. cnt [인덱스] 값이 true라면 1번 조건을 위배하므로 반복을 종료하고 flag( 코드에서 check ) 값에 체크해준 뒤 다음 단어에 대해 탐색
  8. 모든 탐색 종료시까지 조건을 충족했다면 (flag = check = true 라면) result += 1
  9. 최종 result 출력

소스코드 )

n = int(input())
result = 0
for i in range(n):
    s = input()
    alpha_cnt = [False] * 26
    saved_char = ord(s[0])-ord('a')
    check = True
    for j in range(1,len(s)):
        new_char = ord(s[j])-ord('a')
        if alpha_cnt[new_char]:
            check = False
            break
        if new_char != saved_char:
            alpha_cnt[saved_char] = True
            saved_char = new_char
    if check:
        result +=1
print(result)

댓글