GitHub #4659 비밀번호 발음하기
브론즈 문제들만 풀다가 알고리즘 강의들을 전부 듣고 실버문제를 도전했는데...
시간이 꽤 많이 걸렸던 문제이다 ㅠㅠ 결국에는 팀원들의 도움을 받았던..
멍청한 실수를 했다..
우선 처음에 문제를 보고는 아 이거 구현문제네 !
조건문 달면 끝나겠는데?? 생각하고는
이런식으로 처음엔 카운터 사용해서 갯수세면 되겠는데...? 하다보니
아.. 카운터로는 연속의 여부를 판단할 수가 없구나.. 하고
다시 생각을 하게 됐다.
그 다음으로 구현한 함수인데 이렇게 해도 모든 테스트 케이스를 만족시킬 수는 없었다. 단순 조건문으로만 다 해결하려고 하니 겹치는 조건?들을 구현하기가 어려웠다. 그래서 여기서부턴 gpt의 도움을 받아서 어떤식으로 고치는게 좋을지 의견을 물었다.
그래서 나온 방법이 이 아래 방법처럼 변수들을 설정하는 방식이었다
모음소유여부를판단하는 변수, 이전 문자를 저장하는 변수, 연속 여부를 카운트하는 변수, 모음 자음의 갯수를 카운트 하는 변수, 조건 만족 여부를 판단하는 변수들을 설정해주는 방식이다.
def is_valid_password(password):
vowels = 'aeiou'
has_vowel = False
prev_char = ''
consecutive_count = 1
vowel_count = 0
consonant_count = 0
is_acceptable = True
for i in range(len(password)):
if password[i] in vowels:
has_vowel = True
vowel_count += 1
consonant_count = 0 # 자음 카운트 초기화
else:
vowel_count = 0 # 모음 카운트 초기화
consonant_count += 1
# 같은 글자가 연속으로 두 번 오는지 체크
if password[i] == prev_char:
consecutive_count += 1
if consecutive_count >= 2 and password[i] not in ['e', 'o']:
is_acceptable = False
else:
consecutive_count = 1 # 연속 문자 카운트 초기화
# 모음이 3개 연속으로 오는지 체크
if vowel_count > 2:
is_acceptable = False
# 자음이 3개 연속으로 오는지 체크
if consonant_count > 2:
is_acceptable = False
prev_char = password[i] # 이전 문자 업데이트
return has_vowel and is_acceptable
while True:
password = input()
if password == "end":
break
if is_valid_password(password):
print(f"<{password}> is acceptable.")
else:
print(f"<{password}> is not acceptable.")
여기서 치명적인 실수를 했었는데 테스트 케이스에서 같은 문자가 2개 이상 오는 경우를 처리하지 못하고 있었다. 문제의 원인은..
if consecutive_count >= 2 and password[i] not in ['e', 'o']:
is_acceptable = False
이 부분 이었다. 2개 이상이므로 >=를 사용해야했는데 3개 연속 조건과 헷갈렸는지 >2 를 사용하고 있었던 것.....
그리고 두번째로는 마지막 프린트 부분에서
if is_valid_password(password):
print(f"<{password}> is acceptable.")
else:
print(f"<{password}> is not acceptable.")
간과한 사실 하나..! 백준은 출력을 완벽하게 똑같이 구현해야만 하는데
내가 ... 마지막 마침표를 안썼었다...
이렇게 바보같은 실수를 2개나해서 계속 오류가 났던 것....!!
앞으로 구현 문제 풀때는 실수안하도록 더 꼼꼼히 정신차려야겠다 ...!!!!
그리고 오늘 문제를 풀면서 다시 리마인드 된 사실 하나는
파이썬에서 스택의 구현은 리스트로 한다는 것!
앞으로 코딩테스트 문제를 풀어나가면서 새롭게 알게된 점, 다시 리마인드 된 것들, 그리고 실수했던 부분들을 기록해나가려고 한다!