알고리즘/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 함수 실행
- 리스트 'li'에 문자열을 넣어 한 글자씩 저장
- tmp 리스트에 sen의 문자열 첫 번째 글자를 저장
- li 리스트의 길이만큼 반복문 실행
- li 리스트에 tmp 리스트에 있는 문자가 있으면 그룹 단어가 아니므로 0리턴
- li 리스트에 tmp 리스트가 없고, 그전 tmp 문자와 해당 문자가 같지 않으면 tmp에 해당 문자 저장(똑같은 문자가 2번 이상 나타나는 경우 고려)
- 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