알고리즘/baekjoon

baekjoon(1316-그룹 단어 체커)_ python

ash silver 2022. 4. 13. 12:56

1) 문제

2) 예시

3) 제출

import sys
input = sys.stdin.readline
cnt = 0


def checkgroup(sen):
    li = list(sen)
    tmp = [li[0]]
    for k in range(len(li)-1):              # li[i]에 저장된 문자열의 길이만큼 반복
        for a in range(len(tmp)-1):         # tmp에 저장된 문자열의 길이만큼 반복
            if li[k] == tmp[a]:             # li의 해당 문자가 tmp에 있으면
                return 0                    # 그룹 단어X
        if li[k] != tmp[len(tmp)-1]:
            tmp.append(li[k])               # tmp에 li문자 추가
    return 1


for i in range(int(input())):
    cnt = cnt + checkgroup(input())
print(cnt)

4) 메모리/시간/코드길이

5) PLUS

(ash silver의 문제 해결 과정)

1. 숫자를 반복문에서 바로 입력받아 숫자만큼 반복

2. checkgroup 함수에서 문자열 바로 입력받기

3. checkgroup 함수 실행

  1. 리스트 'li'에 문자열을 넣어 한 글자씩 저장
  2. tmp 리스트에 sen의 문자열 첫 번째 글자를 저장
  3. li 리스트의 길이만큼 반복문 실행
  4. li 리스트에 tmp 리스트에 있는 문자가 있으면 그룹 단어가 아니므로 0리턴
  5. li 리스트에 tmp 리스트가 없고, 그전 tmp 문자와 해당 문자가 같지 않으면 tmp에 해당 문자 저장(똑같은 문자가 2번 이상 나타나는 경우 고려)
  6. 3반복문을 반복할 동안 0을 반환하지 않으면 그룹 문자이므로 1리턴

4. checkgroup 함수가 0이면 그룹 단어가 아닌 것이고, 1이면 그룹 단어 인 것.

5. checkgroup 함수의 수를 세서 프린트

 

*다른 사람들은 조건문에 'pass'를 넣음

pass : 조건문은 있는데 실행할 문장이 없을 때, 오류가 발생하지 않도록 무시하고 넘어가도록 함.

 

(비교 - https://velog.io/@csy9604/python-코테-준비-기본-복습-3)

if list(word)==sorted(word,key=word.find)

한 줄로 그룹 단어 판별 가능

 sorted(word, key=word.find)

key를 word.find로 한 것 -> 등장하는 단어 순서대로 동일한 단어로 정렬

ex)

aabbaacc -> aaaabbcc

abab -> aabb

ccbbaacc -> ccccbbaa

=> 그룹 단어가 아니면 if문은 false