1316번: 그룹 단어 체커

beaver.zip·2022년 2월 25일
0

baekjoon

목록 보기
34/56

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

문제

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

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력

첫째 줄에 그룹 단어의 개수를 출력한다.


풀이 1 (정답, 난잡함)

n = int(input())
group_word_count = 0

for _ in range(n):
    word = input() # ex) word = 'happy'
    TF = []
    for w in set(word):	# word 안에서의 중복 제거를 위해 set(word)를 사용함. ex) 'happy' -> ('h','a','y','p')
        if word[word.index(w):word.index(w)+word.count(w)] == w*word.count(w): # ex) if 'pp' == 'pp':
            TF.append(True)
        else:
            TF.append(False)
            break
        
    if TF.count(False) == 0:
        group_word_count += 1

print(group_word_count)

어려울 줄 알았는데 생각보다 금방 풀었다.

사용한 핵심 개념은 문자열 인덱싱이다.
돌아가는 논리를 설명하자면,

입력받은 문자열 word에서,
한 문자가 처음 나온 인덱스 word.index(w) 부터
해당 문자가 단어에 나오는 개수 word.count(w) 만큼 인덱싱하여
만약 해당 인덱싱이 w*word.count(w) 와 같다면: TF에 True를 추가하고,
아니라면: False를 추가하고 반복문을 탈출한다.

문자열 인덱싱을 사용한 것은 굉장히 좋았다고 생각하지만,
코드에서 중복되는 부분도 있고, TF의 존재나 처리가 지나치지 않나 하는 생각이 들어 수정해보겠다.

풀이 2 (풀이 1을 정리한 코드)

n = int(input())
group_word_count = 0

for _ in range(n):
    word = input()
    for w in set(word):
        wi = word.index(w) # wi, wc는 코드 중복을 피하기 위해 선언해주었다.
        wc = word.count(w)
        if word[wi:wi+wc] == w * wc:
            if w == word[-1]: # w가 마지막까지 도달, for문이 중간에 멈추지 않고 끝까지 잘 동작했다면
                group_word_count += 1
            else: continue
        else: # 만약 연속되지 않는 문자가 있으면
            break # 반복문 강제 종료

print(group_word_count)

훨씬 보기 좋다.
continue, break를 잘 활용한 것 같아 만족스럽다.

풀이 2 를 작성하고 다른 코드들을 살펴봤는데,
내 코드보다 짧은 코드들이 많지만 그래도 내 코드가 이해하긴 더 쉬운 것 같다.
만족스럽구만,,


배운 점

  • 문자열 인덱싱은 야무지게 활용 가능하다.
  • 판정식(if문)에서 continue, break를 사용하면 따로 판별 결과를 저장하는 list를 만들지 않아도 된다.
profile
mv blog velog.io/@beaver_zip

0개의 댓글