[백준] 1316: 그룹 단어 체커 - 파이썬[python]

다인·2024년 8월 10일

백준

목록 보기
25/112
post-thumbnail

여태 가장 오래 걸렸던 문제,,, 코드의 위치에 따라 초기화에 따라 결과가 바뀌어서 고민하고 디버깅 해보며 결국 풀어내었다!

1. 내 코드

num = int(input())
count = num

for i in range(num):
    word = input()
    char = ''
    alphabet = []
    for j in word:
        if j in alphabet and char != j:
            count -= 1
            break
        alphabet.append(j)
        char = j

print(count)

풀이

  • 전 단어와 비교하기 위해 char를 두고 전 단어를 계속 저장해 나갔다.
  • 이미 나왔던 단어가 연속하지 않은 위치에 다시 나오면 그룹 단어가 아니므로 나타났던 단어를 저장하기 위해 alphabet 리스트를 사용했다.

잘못했던 부분

  • 처음에 count=num으로 안하고 count=0으로 초기화하고 1씩 더하게 하니까 절대 불가능했다..
  • if j in alphabet and char != j 에서 and으로 연결 안하고 if 문으로 분리 후 char == j이면 continue하게 작성했더니 aa처럼 같은 단어로만 이루어진 단어를 그룹 단어로 체크하지 못하는 불상사가.. 아니네 되네.. 뭐가 문제였지

2. 구글링 후 개선해 본 코드

num = int(input())
count = num

for _ in range(num):
    word = input()
    for i in range(len(word)-1):
        if word[i] in word[i+1:] and word[i] != word[i+1]:
            count -= 1
            break

print(count)
  • 굳이 사용하지 않는 변수 i는 없앴다.
  • char를 사용하지 않고 현재 단어를 기준으로 뒤에 친구들을 비교했다.
  • 인덱스의 범위가 넘어가지 않도록 for문 범위를 len(word)-1로 지정했다. 이는 마지막 단어는 앞에서부터 쭉 검사를 해오기 때문에 굳이 따로 할 필요가 없기 때문에 가능한 것이다. 사실 처음엔 이해가 잘 안돼서 여러 경우들을 돌려보며 이해했당
  • 여기서 if문은 연속되지 않으면서 뒤에 해당 단어가 또 등장하면 즉, 그룹 단어가 아니게 되는 경우를 체크하도록 만들었다.

결론

엇 의외로 개선한 코드가 더 느리당ㅎ

0개의 댓글