Inflearn brand logo image

인프런 커뮤니티 질문&답변

감스트의웃음노예님의 프로필 이미지
감스트의웃음노예

작성한 질문수

카카오 코테 6주 합격! 실전 파이썬 코딩테스트

목표문제: 백준1316 설명, 문제 읽는 법

입/출력으로 모듈화를 해서 문제를 풀어보려고 하는데 방향이 맞는지 궁금합니다.

작성

·

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] 코드 개선을 넣었습니다

 

여러번 푸시면서 지난번보다 더 효율적으로 쓸 수 없을까 고민하시고, 모듈로 사고하는 법 연습하시면은 나중에 더 크고 어려운 문제도 푸실 수 있을 겁니다!

 

잘 연습하고 계십니다!

감스트의웃음노예님의 프로필 이미지
감스트의웃음노예

작성한 질문수

질문하기