코딩 테스트 스터디/백준

[실버 V] 1316번. 그룹 단어 체커

남쪽마을밤송이 2022. 2. 20. 02:43

 문제 

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 사용 언어 

Python3

 풀이 과정 

for문 안에서 if문을 로직에 따라 나눠 문제를 해결했다. 그런데 if문이 많아 뭔가 지저분해 보여 코드를 조금 수정했다.

import sys

def groupwordChecker(str):
  list = []
  list.append(str[0])
  if len(str) == 1:
    return 1 # 한 글자면 무조건 그룹단어
  else:
    for i in range(1, len(str)):
      if str[i] == str[i-1]: # 이전 글자와 비교
        continue
      else:
        if str[i] in list:
            return 0 # 이전 글자와 다른데 list에 있으면 그룹단어 아님
        else:
          list.append(str[i])
    return 1 # 끝까지 돌고 나왔으면 그룹단어

N = int(sys.stdin.readline().strip())
count = 0
for _ in range(N):
  checkStr = sys.stdin.readline().strip()
  if groupwordChecker(checkStr) == 1: # 반환값이 1인 경우만 세기
    count += 1
print(count)

 그런데 if문이 많아 뭔가 지저분해 보여 코드를 조금 수정했다. 그랬더니 보기는 살~짝 좋아졌지만 마지막 for문에서 필요 없는 일도 하고 나와 오히려 시간이 조금 늘었다.

if문 case를 자세히 나누는 것은 코드를 길게하지만 확실히 필요 없는 수행을 줄여줘서 실행 시간에 좋은 것 같다.

 제출 답안 

import sys

def groupwordChecker(str): # happy
  list = []
  list.append(str[0]) # h
  if len(str) == 1: # 5
    return 1 # 한 글자면 무조건 그룹단어
  else:
    for i in range(1, len(str)):
      if str[i] == str[i-1]:
        if i == len(str)-1:
          return 1
        continue
      else:
        if str[i] in list:
          break
        else:
          if i == len(str)-1:
            return 1
          list.append(str[i])
    return 0

N = int(sys.stdin.readline())
count = 0
for _ in range(N):
  checkStr = sys.stdin.readline().strip()
  if groupwordChecker(checkStr) == 1:
    count += 1
print(count)

 다른 사람 답안 

따로 공부한 내용은 없고 아무래도 더 간결한 답안이 있을 것 같아 배울 점이 있는 코드를 찾아보았다.

N = int(input())
result = N
for i in range(0,N):
    word=input()
    for j in range(0,len(word)-1):
        if word[j]==word[j+1]:
            pass
        elif word[j] in word[j+1:]:
            result-=1
            break
print(result)

출처: https://computer-science-student.tistory.com/237

현재 글자 이후 같은 글자가 등장한다면 무조건 그룹단어가 아닌점을 활용해 짠 코드이다. 진짜 이해하기도 쉽고... 코드가 훨씬 보기 좋았다. 그래도 돌려보니 오히려 내 첫 번째 제출 코드가 조금 더 빨랐음에... 위안을 한다.