백준_1316_그룹 단어 체커_파이썬

Today Jeeho Learned·2022년 8월 31일
0

알고리즘

목록 보기
7/38
post-thumbnail

문제 출처

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

내 답안

def group_word_checker(number):

    word_count = number
    count = word_count
    for i in range(word_count):
        word = input()
        for j in range(len(word) - 1):
            if word[j] == word[j + 1]:
                pass
            elif word[j] in word[j + 1:]:
                count -= 1
                break
    print(count)


group_word_checker(int(input()))

정리

한참을 고민하다가 문제를 결국 풀지 못하고 다른 답안을 보게 되었다.
파이썬에서 할 수 있는 배열 활용을 좀 더 잘했어야 했는데 아쉽게 느껴졌다.

  1. 그룹을 체크 할 단어의 개수를 입력받는다.
  2. 위에서 입력받은 수만큼 단어를 입력한다.
  3. 0에서 단어의 길이만큼 반복문을 사용해 하나씩 증가시켜준다.
  4. 입력한 단어의 인덱스값이 다음 인덱스의 값과 같은지 비교한다. 이때 같으면 pass 해준다.
  5. 다를 경우에는 해당 인덱스의 값이 다음 인덱스값부터 단어끝까지의 값에도 있는지 확인한다. 있을경우에는 그룹단어가 아니므로 처음 입력한 단어의 개수에서 -1을 해준다.

들었던 생각

  1. 테스트케이스를 입력받는 과정을 작성하는데도 오랜 시간이 걸렸다. 아직 손에 안익은 것이 분명하다.
  2. pass와 continue에 대한 정리가 제대로 안되어 있던 것 같아서 아쉬웠다.

pass 와 continue 정리 , (추가로 break)

  • continue : 하위 코딩을 건너뛰고 다음 순번의 loop를 수행한다.
  • pass : 실행할 코드가 없는 것으로 다음 행동을 수행한다.
  • break : 반복문을 멈추고 loop 밖으로 나간다.

다른 풀이

시간복잡도를 고려하여 for문을 1번만 사용한 다른사람의 코드를 찾아보려고 했으나 찾지 못했다.
대신 팀원분이 새롭게 작성한 코드가 있어서 가져와보았다.

def group_word_check(word):
    alphabet = [0] * 26
    alphabet[ord(word[0]) - ord('a')] = 1

    for i in range(1, len(word)):
        if word[i] != word[i - 1]:
            index = ord(word[i]) - ord('a')
            if alphabet[index] == 1:
                return 0
            alphabet[index] = 1
    return 1


size = int(input())
count = 0
for i in range(size):
    count += group_word_check(input())

print(count)

알파벳인덱스를 만들어서 확인할 생각을 했다는 것이 신선했다. 좋은 해결방안이라고 생각하는데,
또 한편으로는 배열들을 더 선언해야해서 메모리적인 차원에서 효율적인지는 고민을 해봐야할 것 같다.

profile
기록해야 (살아)남는다 !

0개의 댓글