Hey Tech

문자열처리 #백준1316 #그룹 단어 체커 | 파이썬 풀이 본문

알고리즘/문제풀이

문자열처리 #백준1316 #그룹 단어 체커 | 파이썬 풀이

Tony Park (토니) 2021. 10. 12. 11:33
728x90
반응형

📚  문제

링크: https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

💡 접근법

본 문제 풀이에 있어서는 2가지를 체크하는 것이 가장 중요합니다.

 

✅ 첫째, 단어 내 어떤 알파벳의 기(旣, already) 등장여부

✅ 둘째, 단어 내 어떤 알파벳 이전 알파벳과 같은지 여부

 

즉, 그룹 단어란 어떤 알파벳이 최초로 한 번만 등장했거나 2번 이상 등장할 경우 연속해서 등장해야만 합니다.

이 점만 유념하시면 쉽게 문제를 푸실 수 있습니다.

💻  코드

# https://www.acmicpc.net/problem/1316
import string
input_string = [input() for _ in range(int(input()))]

alphabet_dict = dict()
answer = 0
for word in input_string:
    word_len = len(word)
    if word_len < 3: # 문자열 길이가 2 이하인 경우는 그룹 단어
        answer+=1
        continue
    # 알파벳 출현여부 저장할 딕셔너리 생성
    for alphabet in string.ascii_lowercase:
        alphabet_dict[alphabet] = 0
    
    # 단어 내 좌측부터 한 글자씩 인덱싱
    for i in range(word_len):
        # 마지막 글자까지 인덱싱한 경우
        if i == word_len - 1:
            # 최초 등장한 알파벳이거나 동일한 알파벳이 연속해서 등장한 경우는 그룹 단어
            if alphabet_dict[word[i]] == 0 or word[i-1] == word[i]:
                answer+=1
                break
        elif alphabet_dict[word[i]] == 0: # 최초 등장한 알파벳인 경우
            alphabet_dict[word[i]] = 1 # 알파벳 등장 체크
            continue
        # 기존에 등장한 알파벳이지만 해당 알파벳과 그룹핑이 안되는 경우(직전 알파벳이 종류가 다른 경우)
        elif alphabet_dict[word[i]] == 1 and word[i-1] != word[i]:
            # 그룹 단어 아님
            break
print(answer)

✅ 정답 확인

👨‍💻 파이썬 파일(Github)

https://github.com/park-gb/algorithm-problem-solving/blob/main/string/boj_1316.py

 

GitHub - park-gb/algorithm-problem-solving: 알고리즘 문제 풀이 및 정리

알고리즘 문제 풀이 및 정리. Contribute to park-gb/algorithm-problem-solving development by creating an account on GitHub.

github.com


포스팅 내용에 오류가 있거나 조언/지적/피드백 환영입니다!😄

아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다.

그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다 :)

고맙습니다.

728x90
반응형