문제
https://www.acmicpc.net/problem/4659
풀이
조건이 3가지이고, 모든 조건을 통과해야 acceptable 하기 때문에 각 조건을 하나라도 통과하지 못하면 나머지 조건들은 확인할 필요도 없게 구상했다
두번째 조건에서는 3연속으로 자음이거나 3연속 모음인 경우 acceptable를 만족하지 않는 조건이라
모음 배열을 만들어 해당 배열에 하나라도 있으면 모음으로 판단, 하나라도 없으면 자음으로 판단하게 하였다
무난한 구현 문제였던 것 같다!
코드
import Foundation
let vowels = ["a","e","u","o","i"]
while(true) {
let testCase = readLine()!
if testCase == "end" {break}
print("<\(testCase)> is")
if check(str: testCase) {
print("acceptable.")
}
else {
print("not acceptable.")
}
}
func check(str: String) -> Bool {
var flag1 = false
// 첫번째 조건
for i in str {
if i == "a" || i == "e" || i == "i" || i == "o" || i == "u" {
flag1 = true
break
}
}
if flag1 == false {return false}
// 1글자인 경우 2,3번 조건을 확인할 필요 없으므로 종료
if str.count == 1 {
return true
}
// 세번째 조건
for i in 0..<str.count - 1 {
if str[i] == str[i+1]{
if str[i] != "o" && str[i] != "e" {
return false
}
}
}
// 2글자인 경우 두번째 조건을 확인할 필요가 없으므로 종료
if str.count == 2 {
return true
}
// 두번째 조건
for i in 0..<str.count - 2 {
if checkVowel(c: String(str[i])) && checkVowel(c: String(str[i+1])) && checkVowel(c: String(str[i+2]))
|| !checkVowel(c: String(str[i])) && !checkVowel(c: String(str[i+1])) && !checkVowel(c: String(str[i+2])){
return false
}
}
// 모든 조건을 통과했을 때 true 반환
return true
}
func checkVowel(c: String) -> Bool {
for i in vowels {
if c == i {
return true
}
}
return false
}
extension String {
subscript(_ index: Int) -> Character {
return self[self.index(self.startIndex, offsetBy: index)]
}
}
'코테' 카테고리의 다른 글
[Swift] 정렬 연습 문제 추천 / sort,sorted 연습문제 모음 (0) | 2024.10.04 |
---|---|
[Programers] 카드 뭉치 (0) | 2024.03.07 |