dev/algorithm
BOJ / 4659번 / 비밀번호 발음하기 [Go][Python3]
crscnt
2021. 2. 8. 21:00
👩🏻💻 문제
4659번: 비밀번호 발음하기
좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp
www.acmicpc.net
✍🏻 풀이
🎨 Go
// https://www.acmicpc.net/problem/4659
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
for {
var password string
fmt.Fscanln(reader, &password)
if password == "end" {
break
}
if checkPasswordAcceptable(password) {
fmt.Fprintf(writer, "<%s> is acceptable.\n", password)
} else {
fmt.Fprintf(writer, "<%s> is not acceptable.\n", password)
}
}
}
func checkPasswordAcceptable(password string) bool {
var prevLetter string
var totalVowelCount, vowelCount, consonantCount int
for i := 0; i < len(password); i++ {
var curLetter = string(password[i])
if isSame(prevLetter, curLetter) {
return false
}
if isVowel(curLetter) {
vowelCount++
totalVowelCount++
if vowelCount == 3 {
return false
}
consonantCount = 0
} else {
consonantCount++
if consonantCount == 3 {
return false
}
vowelCount = 0
}
prevLetter = curLetter
}
if totalVowelCount == 0 {
return false
}
return true
}
func isVowel(letter string) bool {
var vowels = []string{"a", "e", "i", "o", "u"}
for _, vowel := range vowels {
if letter == vowel {
return true
}
}
return false
}
func isSame(prevLetter, letter string) bool {
if prevLetter == letter && letter != "e" && letter != "o" {
return true
}
return false
}
🎨 Python3
# https://www.acmicpc.net/problem/4659
import sys
def check_password_acceptable(password):
prev_letter = ""
total_vowel_count, vowel_count, consonant_count = 0, 0, 0
for i in range(len(password)):
cur_letter = password[i]
if is_same(prev_letter, cur_letter):
return False
if is_vowel(cur_letter):
vowel_count += 1
total_vowel_count += 1
if vowel_count == 3:
return False
consonant_count = 0
else:
consonant_count += 1
if consonant_count == 3:
return False
vowel_count = 0
prev_letter = cur_letter
if total_vowel_count == 0:
return False
return True
def is_vowel(letter):
vowels = ["a", "e", "i", "o", "u"]
if letter in vowels:
return True
return False
def is_same(prev_letter, letter):
if prev_letter == letter and letter != "e" and letter != "o":
return True
return False
if __name__ == "__main__":
while True:
password = sys.stdin.readline().rstrip()
if password == "end":
break
if check_password_acceptable(password):
print("<{}> is acceptable.".format(password))
else:
print("<{}> is not acceptable.".format(password))
728x90