ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [1일차](문제 번호 : 1316, 그룹 단어 체커) 도전
    백준 문제 풀이 2023. 7. 18. 02:08

    1. 문제 요약

    첫 째줄에 정수 N을 입력받는다.

    그 다음 줄부터 단어를 한 줄에 하나씩 총 N번 제공한다.

    그 단어들중 그룹 단어가 몇 개인지 출력하면 된다.

    ( 그룹 단어란 aaabbbc와 같이 같은 알파벳이 떨어지지않은 단어이다. 반례로는 aabbaa가 있다.)

     

    예시.

    입력

    5
    ab
    aa
    aca
    ba
    bb

    출력

    4

    2. 풀어보기

    가장 먼저 생각이든 방법은 단어를 입력받아 단어를 복제해놓는다. 그리고 한 글자씩 앞에서부터 불러온다.

    그리고 그 글자를 하나 삭제시킨다.

    그 후, 복제되누단어를 뒤집고 불러온 글자를 하나 삭제시킨다. 그 후, 단어를 다시 뒤집어 복제된 단어와 단어가 일치하는 지 알아본다.

    예를 들어 단어가 word = aabccbaabb라고 하자.

    복제본 단어는 word2 = aabccbaabb이다.

     

    첫 글자는 a이다. 따라서, word = abccbaabb가 된다.

    복제본 단어는 word2 = aabccbabb가 된다.

     

    복제본 단어와 단어가 다르므로 이 단어는 그룹 단어가 아니다.

     

    두 번째 예시로는 word = aaaabbbccc이다.

    word2 = aaaabbbccc이다.

     

    위와 같은 방식으로 첫 글자는 a이므로,

    word = aaabbbccc

    word2 = aaabbbccc이므로 같은 단어이다. 이를 word가 비어졌을 때까지 반복하여 그룹 단어가 아닌 것이 아니게 되면 통과한다.

     

    따라서 코드를 다음과 같이 작성했다.

    N = int(input())
    count = 0
    for _ in range(N):
        word = input()
        dupword = word
        for i in word:
            word = word.replace(i,'',1)
            rev_dupword = dupword[::-1]
            rev_dupword = rev_dupword.replace(i,'',1)
            dupword = rev_dupword[::-1]
            if word == dupword:
                if word == '':
                    count += 1
                else:
                    continue
            else:
                break
    print(count)

     

    word는 문자열이므로 remove가 아닌 replace를 활용하였다.

    바로 정답을 맞혔다.. 기분이 좋다.

     

    따라서 최종 코드는 위의 코드와 같다.


    3. 개선방안

    맞힌 사람들의 정답을 봐보니 모두 다 sorted라는 함수를 쓰고 있었다.

    sorted(word ,key=word.find) 라는 식을 다들 이용하고 있었다.

    나도 수업때 sorted 함수에 대해 들어본 적은 있었지만, key = 부분이나 .find에 대해 잘 몰라서 먼저, 구글링을 해본 후,

    해결이 되지 않아, 카카오톡 오픈채팅에 질문을 해보았다.

    예를 들어, word = 'banana' 라면 위의 sorted 함수는 baaann을 리스트로 반환한다.

    (즉, 앞에서 부터 순서대로 글자를 기준으로 삼고, 정렬.)

    따라서 list(word) == sorted(word ,key=word.find) 라면 그룹 단어가 되는 것이다.


    4. 얻어가는 것

    1. str.replace()는 str 자체를 변환시키는 것이 아니라, str을 변환시킨 것을 반환한다.

    2. sorted 함수와 key = , 그리고 .find 에 대하여.

     

     

Designed by Tistory.