ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1316번 그룹 단어 체커
    백준 코딩테스트 2024. 10. 30. 10:29

    문제

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

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

    입력

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

    출력

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

    예제 입력 1 복사

    3
    happy
    new
    year
    

    예제 출력 1 복사

    3

    예제 입력 2 복사

    4
    aba
    abab
    abcabc
    a
    

    예제 출력 2 복사

    1
    

    예제 입력 3 복사

    5
    ab
    aa
    aca
    ba
    bb
    

    예제 출력 3 복사

    4
    

    예제 입력 4 복사

    2
    yzyzy
    zyzyz
    

    예제 출력 4 복사

    0
    

    예제 입력 5 복사

    1
    z
    

    예제 출력 5 복사

    1
    

    예제 입력 6 복사

    9
    aaa
    aaazbz
    babb
    aazz
    azbz
    aabbaa
    abacc
    aba
    zzaz
    

    예제 출력 6 복사

    2

     

    n = int(input())
    group_word = n

    for i in range(n):
        s = str(input())
        dupli_set = set()
        temp = ''
        for j in range(len(s)):
            if temp == s[j]:
                continue
            else:
                if s[j] in dupli_set:
                    group_word -= 1
                    break
                else:
                    dupli_set.add(s[j])
            temp = s[j]

    print(group_word)

    저는 순서대로 문자들을 비교하고 이전 문자와 이후 문자를 비교하여 다르면 set에 넣고, set에 만약 그 문자가 있다면 기존 개수에서 -1하는 식으로 했는데, 생각을 좀 더 해보니 이걸 더 간단하게 할 수 있을 것 같습니다. 변수를 너무 많이 쓴거 같아요. s[j] in dupli_set을 보다가 더 간단하게 할 수 있겠다는 생각을 하게 되었어요. 그리고 굳이 temp가 필요 없겠다 생각했습니다. 여기서 핵심은 반복문에서의 continue와 break를 적절하게 걸어주고 문자열 조건문 입니다.

     

    n = int(input())
    group_word = n

    for i in range(n):
        word = str(input())
        for char  in range(len(word) - 1):
            if word[char] == word[char+1]:
                continue
            else:
                if word[char] in word[char+2:]:
                    group_word -= 1
                    break

    print(group_word)

    좀 더 코드가 간결해졌습니다.

    elif로 해서 그냥 in에 대한 조건을 넣으면 되는 데, 제가 보기에는 외관상 안좋은 거 같아서 if 하나 더 넣었습니다.

    들여쓰기가 더 깊은게 별로인가.. 아무튼 word[char]하고 word[char+1]이 같지 않으면, word[char+2:] 에 대해서 그 안에 word[char]가 있으면 그룹 단어 조건이 아니니까 group_word에서 -1 을 해줍니다.

    '백준 코딩테스트' 카테고리의 다른 글

    2738번 행렬 덧셈  (0) 2024.10.30
    25206번 너의 평점은  (0) 2024.10.30
    2941번 크로아티아 알파벳  (0) 2024.10.30
    1157번 단어 공부  (0) 2024.10.28
    10988번 팰린드롬인지 확인하  (0) 2024.10.28
Designed by Tistory.