티스토리 뷰
반응형
백준 비밀번호 발음하기 4659 파이썬
문제
좋은 비밀번호를 판단하는 규칙은 다음과 같습니다.
- 반드시 모음을 하나 이상 포함해야 합니다. (모음은 a, e, i, o, u)
- 모음이 3개 연속, 또는 자음이 3개 연속 오면 안 됩니다.
- 같은 문자가 연속으로 두 번 나오면 안 됩니다. 단, `ee`와 `oo`는 허용합니다.
입력은 여러 개의 테스트 케이스이며, 마지막 입력은 `"end"`로 종료됩니다.
출력은 `<비밀번호> is acceptable.` 혹은 `<비밀번호> is not acceptable.` 형식으로 출력해야 합니다.
테스트케이스
입력:
a
tv
ptoui
bontres
zoggax
wiinq
eep
houctuh
end
출력:
is acceptable.
is not acceptable.
is not acceptable.
is not acceptable.
is not acceptable.
is not acceptable.
is acceptable.
is acceptable.
작동원리
- 모음 검사
문자열 안에 모음이 하나라도 있는지 확인합니다. 없으면 무조건 불가입니다. - 연속 검사
문자를 하나씩 보면서 모음/자음 카운트를 합니다.- 모음을 만나면 모음 카운트를 증가시키고, 자음 카운트는 0으로 초기화합니다.
- 자음을 만나면 자음 카운트를 증가시키고, 모음 카운트는 0으로 초기화합니다.
- 모음 카운트나 자음 카운트가 3 이상이면 불가입니다.
- 연속된 같은 문자 검사
이전 문자와 현재 문자가 같으면 불가입니다. 단, 예외로 `ee`, `oo`는 허용합니다. - 출력 형식
문제의 예제 출력처럼 반드시 `<비밀번호> is acceptable.` 또는 `<비밀번호> is not acceptable.`의 형식을 지켜야 하며, 마지막에 점(`.`)이 있어야 합니다.
아이디어
- `Check()` 함수를 만들어 모음인지 판별합니다.
- 반복문에서 각 문자를 보며 조건을 검사합니다.
- 세 조건을 모두 만족하면 `"acceptable."`, 아니면 `"not acceptable."`을 출력합니다.
전체코드
def Check(arr):
if arr=='a':
return True
if arr=='e':
return True
if arr=='i':
return True
if arr=='o':
return True
if arr=='u':
return True
return False
while(True):
arr=input()
cnt_mo=0
cnt_ja=0
check_mo=False
check_ot=True
if arr=='end':
break
for i in range(len(arr)):
if Check(arr[i]):
cnt_mo+=1
cnt_ja=0
check_mo=True
else:
cnt_mo=0
cnt_ja+=1
if(cnt_mo>=3 or cnt_ja>=3):
check_ot=False
break
if(i>0 and arr[i]==arr[i-1] and arr[i]!='e' and arr[i]!='o'):
check_ot=False
break
if(check_mo and check_ot):
print(f'<{arr}> is acceptable.')
else:
print(f'<{arr}> is not acceptable.')
결론
이 문제는 비밀번호가 “발음할 수 있는 형태인지” 판별하는 문제입니다. 즉, 사람이 쉽게 읽고 기억할 수 있는 비밀번호 규칙을 프로그램으로 검사하는 것이 핵심입니다.
- 반드시 모음을 포함해야 하므로, 완전히 자음으로만 이루어진 문자열은 허용되지 않습니다.
- 발음하기 어려운 긴 모음이나 긴 자음의 연속(3개 이상)은 허용되지 않습니다.
- 같은 글자가 두 번 연속되면 발음이 불편해지지만, 실제 발음에서 자연스러운 `"ee"`, `"oo"`는 허용됩니다.
따라서 이 문제는 단순한 문자열 검사가 아니라, 사람의 언어적 직관을 흉내 내는 규칙을 프로그램으로 구현하는 문제입니다. 입력된 문자열이 이 규칙을 모두 만족하면 `<비밀번호> is acceptable.`을 출력하고, 그렇지 않으면 `<비밀번호> is not acceptable.`을 출력하는 것이 최종 목표입니다.
즉, 비밀번호를 안전하면서도 사람이 발음 가능하도록 만들려는 규칙을 프로그래밍으로 구현하는 연습 문제라는 것이 결론입니다.
반응형
'백준 스터디' 카테고리의 다른 글
백준 영단어 암기는 괴로워 (20920번) 파이썬 (1) | 2025.09.01 |
---|---|
백준 영단어 암기는 괴로워 (20920번) C++ (1) | 2025.08.31 |
백준 비밀번호 발음하기 (4659번) C++ (0) | 2025.08.31 |
백준 흙길 보수하기 1911번 파이썬 (0) | 2025.08.30 |
백준 1911번 흙길 보수하기 C++ (0) | 2025.08.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- C++ 알고리즘
- 브루트포스
- 객체지향
- c언어
- python 알고리즘
- 동적 계획법
- 알고리즘 문제풀이
- dfs
- 동적계획법
- 파이썬코딩
- c++알고리즘
- 코딩테스트
- 프로그래밍
- 인접 행렬
- 코딩 테스트
- 코딩
- 문자열처리
- 알고리즘문제풀이
- 파이썬
- 알고리즘기초
- 문제풀이
- 문제 풀이
- DP
- Python
- 그리디알고리즘
- 백준
- 그리디
- 그래프 탐색
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함
반응형