[백준_Python] 1316번: 그룹 단어 체커

Jason·2023년 7월 20일
post-thumbnail

1.문제

2.문제 해석

1) 이 친구 첫 인상

뭐..뭐지? 일단 바로 예제 보면서 감 잡아보기.

2) 딥한 고민

문자가 두번 이상 등장할 때 "aabba" 처럼 떨어져서 등장하게 되면 그룹 단어가 아니다.

만약 "bbaacc" 처럼 각각의 모든 문자가 붙어 있다면 그룹 단어이다.

각 줄에 단어가 주어지고 그 단어가 그룹 단어인지 확인해 전체 그룹 단어 개수가 몇개인지 도출해야 한다.

3.문제 접근

1) 컨셉

우선 한 단어가 주어지면 set()을 통해 unique 값을 확인한다.
이후 각각의 문자 index를 리스트로 나타낸다.
예) "aabbaa" => a의 위치 index 리스트 = [0, 1, 4, 5]
이 index를 통해서 그룹 문자에 포함시킬 것인지를 확인한다.

2) 이유

모든 문자를 한꺼번에 고려하기엔 나의 뇌 용량이 부족할 듯 했다.
그래서 한 문자씩 고려하고자 했다.

4.나의 길지만 소중한 풀이

n = int(input())
group_word_checker = 0

for _ in range(n):
    word = input()
    checker = True
    # 단어 내 각 문자의 위치 index를 리스트로 표현
    for i in set(word): 
        index_list =  [index for index, letter in enumerate(word) if letter == i]
        # 위치 index 길이가 1이라면 해당 문자는 단어 내에서 한개만 존재하므로 확인할 필요 없음 
        if len(index_list) == 1:
            pass
        else:
            #문자의 연속성 확인
            for i in range(len(index_list)-1):
                if index_list[i+1] - index_list[i] != 1:
                    checker = False
                else:
                    pass
    if checker == True:     
        group_word_checker += 1
    else:
        pass
print(group_word_checker)

5.남의 짧고 빠른 웅장한 풀이

1) 이리도 짧다니

N = int(input())
cnt = N

for i in range(N):
    word = input()
    # 단어의 첫 문자부터 탐색해 그 다음 문자와의 동일성을 따진다. 
    for j in range(0, len(word)-1):
        # "aa"처럼 문자가 같다면 넘어가고
        if word[j] == word[j+1]:
            pass
        # "ab"처럼 문자가 같지 않다면 단어의 뒷 문자들에 "a"가 있는지 확인한다. 있다면? 그룹 단어가 아닌 것이다. 
        elif word[j] in word[j+1:]:
            cnt -= 1
            # 확인이 끝났다면 다른 단어로 넘어간다.
            break

print(cnt)

2) 정렬로 풀다니

result = 0
for i in range(int(input())):
    word = input()
    # 만약 각각의 문자가 처음 나오는 순서대로 정렬했을 때 기존의 단어와 같다면 그룹단어이다. 
    # 예를 들어 "bbccbb"를 아래와 같이 정렬한다면, "bbbbcc"가 되어 기존의 단어와 다르게 된다.
    if list(word) == sorted(word, key=word.find):
        result += 1
print(result)

[key = word.find 부분 참고]

6. 내가 배운 것은 무엇인가?

코드를 잘 짜는 사람과 나의 차이점은 무엇인가. 다른 사람에게 어떻게 코드 짰는지 물어보지는 않았지만, 킹리적 갓심으로다가 다른 분들은 문제 해석과 설계에 시간을 좀 더 투자했을 것 같다.

추가적으로 자료 구조와 알고리즘 자체에 대한 지식이 더 풍부하지 않을까 싶다.

난 아직 자료 구조와 알고리즘은 모르는 상태이고 문제를 읽다가 번뜩 떠오르는 방법(여태 살아오면서 무슨 경험을 해서인지 모르겠지만 쌓아온 나만의 풀이 방법) 하나만 가지고 들들 볶아서 결국 답은 맞춰낸다.

생각이 짧으면 엉덩이가 고생한다는 말이 떠오른다. 물론 내가 만든 말이다.

고수들의 코드 보면서 나도 차분하게 문제를 분석하는 방법에 대해 연구해야겠다.

근데 이상하게 좌절하는게 아니고 뭔가 흥분된다. 내가 시간을 들이고 고민하고 성장하면 나도 저렇게 간결하지만 간단하게 문제를 해결할 수 있는 코드를 짤 수 있으려나.

profile
개발과 데이터에 관심이 많은 서버 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

글이 잘 정리되어 있네요. 감사합니다.

답글 달기