[백준] 1316번(그룹 단어 체커)

·2022년 11월 9일

백준 문제풀이

목록 보기
17/159

백준 1316번


최종 제출 코드

number = int(input())
count = 0

for j in range(number):

  word = input()
  lists = list(word)
  lists.sort()
  result = []
  
  if len(set(lists))==len(lists):
    count +=1
  else:
    for i in range(len(lists)):
      if lists.count(lists[i]) > 1:
      	# i번째 원소*문자열 내 i번째 원소의 개수
        joint = lists[i]*(lists.count(lists[i]))
        result.append(joint)
    
    # 중복 원소 제거
    result2 = list(set(result))
    
    # result2 내 모든 요소가 문자열 내에 존재하는지 검사
    k=0
    for i in range(len(result2)):
      if result2[i] in word:
        k+=1
    if k==len(result2):
      count +=1

print(count)
  • if: 단어가 모두 다른 알파벳으로 구성된 경우를 판별
  • else: 단어 내에 중복되는 알파벳이 있는 경우를 판별
    중복되는 알파벳이 있을 경우, 해당 알파벳은 반드시 단어 안에 연속되게 나타나야 한다.
    ex) 단어 내에 a가 3개 존재한다면, 단어 내에는 반드시 aaa의 형태로 나타나야 한다.

다른 사람이 작성한 코드

N = int(input())
cnt = N

for i in range(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:]:
            cnt -= 1
            break

print(cnt)
  • 단어 내에 중복되는 알파벳이 있는 경우, 해당 알파벳은 반드시 단어 안에 연속되게 나타나야 함을 나와는 다른 방법으로 해석
    내 코드: 같은 알파벳으로 구성된 문자열이 단어 안에 나타나야 한다
    위의 코드: 똑같은 알파벳이 떨어져서 존재하지 않으면 된다
  • 위와 같이 해석하면 내 코드처럼 if문으로 분류할 필요도 없고, 코드도 훨씬 간단해진다
  • count 변수도 0이 아니라 입력받은 문자열의 길이부터 시작하는 점이 새로움
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글