프로그래머스 LV.1 옹알이(2) 스위프트
실패케이스와 이해 과정을
블로그를 작성했습니다.
성공 케이스만 보고 싶으신 분들은 맨 아래 코드를 확인하시면 됩니다.
지문을 살펴봤을 때 가장 핵심인 부분은
1. 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음 밖에 없음
== > 즉, ["aya", "ye", "woo", "ma"] 과 이것을 조합해서 만들수 있는 발음밖에 하지 못함
ex) ["wooma"] 게임...
2. 연속해서 발음하는 것은 어려워함
첫번째로
주어지는 babbling에 ["aya", "ye", "woo", "ma"] 포함여부를 확인해야한다.
흠... 그러면 contains를 쓰면 되는건가? ... 라고 생각했지만
따로 처리를 어떻게 해줘야할지 몰라서... 스킵...
그렇다면... contains느낌으로 포함되어 있다면 다른 글자로 바꿔주면 어떨까?
함수 중에 해당 String을 바꿔주는 원하는 문자열로 바꿔주는 함수가 있습니다.
// of를 --> with로 변환
replacingOccurrences(of: "aya", with: "1")
예시로
var example = "exampleCode"
var result = example.replacingOccurrences(of: "emxaple", with: "Thor")
print(result)
// "ThorCode"
흠... 그렇다면 해당 babbling을 for문으로 돌리면서 하나씩 변환을 해주면 되지 않을까?
func solution(_ babbling:[String]) -> Int {
for i in babbling {
// str를 해당 for문의 순서대로 초기화 시켜주기 위해
var str = i
str = str.replacingOccurrences(of: "aya", with: "1")
str = str.replacingOccurrences(of: "ye", with: "2")
str = str.replacingOccurrences(of: "woo", with: "3")
str = str.replacingOccurrences(of: "ma", with: "4")
print(str)
}
return 0
}
// babbling: ["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"]
// print 결과
// 12, uuu, 22, 243, 11a
자 이렇게 결과 값이 나왔는데요 . 그렇다면 숫자로만 되어 있는 것이 ["aya", "ye", "woo", "ma"] 을 포함하고 있다고
생각하면 됩니다.
즉, 12, 22, 243 은 모두 포함되어 있는 것이죠
11a는 "aya aya a" 이렇게 구성되어 있기 때문에 11은 조카가 발음 하겠지만... a는 발음하지 못해서 탈락!
22는
1. 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음 밖에 없음
== > 즉, ["aya", "ye", "woo", "ma"] 과 이것을 조합해서 만들수 있는 발음밖에 하지 못함
ex) ["wooma"] 게임...
2. 연속해서 발음하는 것은 어려워함
해당 조건의 2번째를 위배 합니다.
그렇기 때문에 조건식을 추가해 줍니다. 해당 번호가 연속적으로 되어 있으면 안된다는 식을 써주면 됩니다.
일단은 조건으로는 같은 숫자가 연속적으로 나오면 안되고, str이 하나도 포함되어 있지 않은 경우가 있을 수도 있으니
조건으로 추가해줍니다.
// str이 String으로 되어있으니까
// Int(str)로 형 변환 해주고 nil이 아닐때 즉, 값이 Int로 변환이 된다면 -> 숫자가 있다
// str에 같은 수가 반복되지 않을때 해당 함수 실행
if Int(str) != nil && !str.contains("11") && !str.contains("22") &&!str.contains("33") &&!str.contains("44") {
count +=1
}
조건을 만족할때 count를 +1을 해줍니다.
전체 코드 입니다.
func solution(_ babbling:[String]) -> Int {
var count = 0
for i in babbling {
// str를 해당 for문의 순서대로 초기화 시켜주기 위해
var str = i
str = str.replacingOccurrences(of: "aya", with: "1")
str = str.replacingOccurrences(of: "ye", with: "2")
str = str.replacingOccurrences(of: "woo", with: "3")
str = str.replacingOccurrences(of: "ma", with: "4")
print(str)
// str이 String으로 되어있으니까
// Int(str)로 형 변환 해주고 nil이 아닐때 즉, 값이 Int로 변환이 된다면 -> 숫자가 있다
// str에 같은 수가 반복되지 않을때 해당 함수 실행
if Int(str) != nil && !str.contains("11") && !str.contains("22") &&!str.contains("33") &&!str.contains("44") {
count += 1
}
}
return count
}