문제
https://www.acmicpc.net/problem/1316
사용 언어
Python3
풀이 과정
for문 안에서 if문을 로직에 따라 나눠 문제를 해결했다. 그런데 if문이 많아 뭔가 지저분해 보여 코드를 조금 수정했다.
import sys
def groupwordChecker(str):
list = []
list.append(str[0])
if len(str) == 1:
return 1 # 한 글자면 무조건 그룹단어
else:
for i in range(1, len(str)):
if str[i] == str[i-1]: # 이전 글자와 비교
continue
else:
if str[i] in list:
return 0 # 이전 글자와 다른데 list에 있으면 그룹단어 아님
else:
list.append(str[i])
return 1 # 끝까지 돌고 나왔으면 그룹단어
N = int(sys.stdin.readline().strip())
count = 0
for _ in range(N):
checkStr = sys.stdin.readline().strip()
if groupwordChecker(checkStr) == 1: # 반환값이 1인 경우만 세기
count += 1
print(count)
그런데 if문이 많아 뭔가 지저분해 보여 코드를 조금 수정했다. 그랬더니 보기는 살~짝 좋아졌지만 마지막 for문에서 필요 없는 일도 하고 나와 오히려 시간이 조금 늘었다.
if문 case를 자세히 나누는 것은 코드를 길게하지만 확실히 필요 없는 수행을 줄여줘서 실행 시간에 좋은 것 같다.
제출 답안
import sys
def groupwordChecker(str): # happy
list = []
list.append(str[0]) # h
if len(str) == 1: # 5
return 1 # 한 글자면 무조건 그룹단어
else:
for i in range(1, len(str)):
if str[i] == str[i-1]:
if i == len(str)-1:
return 1
continue
else:
if str[i] in list:
break
else:
if i == len(str)-1:
return 1
list.append(str[i])
return 0
N = int(sys.stdin.readline())
count = 0
for _ in range(N):
checkStr = sys.stdin.readline().strip()
if groupwordChecker(checkStr) == 1:
count += 1
print(count)
다른 사람 답안
따로 공부한 내용은 없고 아무래도 더 간결한 답안이 있을 것 같아 배울 점이 있는 코드를 찾아보았다.
N = int(input())
result = N
for i in range(0,N):
word=input()
for j in range(0,len(word)-1):
if word[j]==word[j+1]:
pass
elif word[j] in word[j+1:]:
result-=1
break
print(result)
출처: https://computer-science-student.tistory.com/237
현재 글자 이후 같은 글자가 등장한다면 무조건 그룹단어가 아닌점을 활용해 짠 코드이다. 진짜 이해하기도 쉽고... 코드가 훨씬 보기 좋았다. 그래도 돌려보니 오히려 내 첫 번째 제출 코드가 조금 더 빨랐음에... 위안을 한다.
'코딩 테스트 스터디 > 백준' 카테고리의 다른 글
[실버 V] 16171번. 나는 친구가 적다 (Small) (0) | 2022.02.23 |
---|---|
[실버 IV] 1764번. 듣보잡 (0) | 2022.02.20 |
[실버 IV] 1120번. 문자열 (0) | 2022.02.16 |
[실버 V] 11723번. 집합 (0) | 2022.02.15 |
[브론즈 I] 2389번. 설탕 배달 (0) | 2022.02.10 |