#55. 백준 1316번 문제 풀이: 그룹 단어 체커 | 문제 원본 보기 |
--입력-- 3 happy new year --출력-- 3 --입력-- 4 aba abab abcabc a --출력-- 1
문자열을 받아 문자단위로 구분해서 체크할 수 있어야 풀리는 문제이다. 그리고 문자의 반복 여부를 체크할 수 있는 알고리즘이 있어야 한다. 그룹단어를 체크하는 알고리즘은 아래와 같을 것이다. -- 이전문자 = 처음문자 루프 (두번째 문자부터 글자수만큼): if (이전문자가 비교문자와 다르면) : if (비교문자가 체크문자열에 있다면) : 그룹문자 아님 이전문자 = 비교문자 체크문자열에 비교문자 등록 루프 끝 -- 체크문자열 활용 방법 1.체크문자열은 알파뱃갯수(26) 크기의 배열을 만들고 0으로 초기화 한다. 2.문자가 있으면 체크문자열에서 해당하는 문자값을 0로 설정 3.새로운 비교문자가 체크문자열에서 1값을 가졌다면 그룹단어가 아니다 문자에 해당하는 배열에 1 값 설정
n = int(input())
# 단어개수를 입력받아 정수로 변환 후 대입
count = 0 # 그룹단어 개수 카운트
anum = ord('a') # 'a' 문자의 아스키 코드값.
for i in range(n): # n만큼 반복
wd = input() # 단어 한개를 받아옴
ck = [0]*26 # 사용 알파벳을 기록하기 위한 리스트. 0으로 초기화
gr = True # 그룹단어 여부. 초기값 True
c0 = wd[0] # 첫글자를 초기값으로 대입
for j in range(1, len(wd)): # 두번째 글자부터 비교 시작
if c0 != wd[j]: # 새로운 문자가 시작되면
cnum = ord(wd[j]) - anum
# 현재 문자의 아스키코드 에서 'a'의 아스키코드를 빼면 알파벳 순서값이 된다.
if ck[cnum] == 1: # 이미 해당 알파벳이 사용되었었다면 그룹단어가 아님.
gr = False # 그룹단어가 아니다.
break; # 그룹단어가 아니므로 더 비교할 필요가 없으니 빠져나간다.
else: # 사용했던 문자가 아니면
ck[ord(c0)-anum] = 1 # 이전 문자의 순서 위치에 사용문자로 등록
c0 = wd[j] # 이전 문자는 현재 문자로 변경
if gr == True: # 그룹단어라면
count += 1 # 그룹단어 갯수 카운트 증가
print(count)