인프런 커뮤니티 질문&답변
입/출력으로 모듈화를 해서 문제를 풀어보려고 하는데 방향이 맞는지 궁금합니다.
작성
·
90
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] 코드 개선을 넣었습니다
여러번 푸시면서 지난번보다 더 효율적으로 쓸 수 없을까 고민하시고, 모듈로 사고하는 법 연습하시면은 나중에 더 크고 어려운 문제도 푸실 수 있을 겁니다!
잘 연습하고 계십니다!





