작성
·
36
0
# 단어 입력 / 목록 리스트 출력
# 목록 리스트 입력 / 중복 검사 리스트에 이미 있는 요소인지 확인 후 각 요소를 다른 문자가 나오기전까지 중복 검사 리스트에 저장
# 중복 검사 리스트가 온전히 만들어진걸 카운팅 +1 입력 / 카운팅 출력
import sys
input = sys.stdin.readline
t = int(input())
cnt = 0
words = []
for _ in range(t):
words.append(input())
for word in words:
used_li = []
cur_word = ''
flag = 1
for c in word:
if cur_word != c and c not in used_li:
cur_word = c
used_li.append(c)
continue
if cur_word == c:
continue
if cur_word != c and c in used_li:
flag = 0
break
if flag == 1:
cnt += 1
print(cnt)
헤이밥 강의를 보고 평소 풀던 방법이 아닌 모듈화로 쪼개서 풀어보려 하는데 괜찮은지..
그리고 조건문을 좀 복잡하게 달아서 푼 것같은데 방법론적으로 좋은 접근인지도 조언을 구하고 싶습니다.
답변 1
1
안녕하세요! 늦은 답변 죄송합니다
코드도 너무 좋고 모듈화도 좋습니다!
import sys
input = sys.stdin.readline
t = int(input())
cnt = 0
# 단어 입력 / 목록 리스트 출력
words = []
for _ in range(t):
words.append(input())
# 목록 리스트 입력 / 중복 검사 리스트에 이미 있는 요소인지 확인 후 각 요소를 다른 문자가 나오기전까지 중복 검사 리스트에 저장
# 중복 검사 리스트가 온전히 만들어진걸 카운팅 +1 입력 / 카운팅 출력
for word in words:
used_li = [] # [1] 집합(set)을 이용하면, (이어서..)
cur_word = ''
flag = 1
for c in word:
if cur_word != c and c not in used_li: # [1] 여기서 not in 이 O(1)으로 줄어듭니다!
cur_word = c
used_li.append(c)
continue
if cur_word == c: # [2] 없어도 되는 코드
continue
if cur_word != c and c in used_li:
flag = 0
break
if flag == 1:
cnt += 1
print(cnt)
주석으로 [1] 효율 개선과 [2] 코드 개선을 넣었습니다
여러번 푸시면서 지난번보다 더 효율적으로 쓸 수 없을까 고민하시고, 모듈로 사고하는 법 연습하시면은 나중에 더 크고 어려운 문제도 푸실 수 있을 겁니다!
잘 연습하고 계십니다!