728x90
[Swift] 프로그래머스 옹알이 (2)(lv. 1)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/133499
2. 접근
lv. 0의 옹알이 (0)과 비슷한 문제인데, '연속해서 발음'하는 것을 하지 못한다는 것을 유의해야 한다.
그래서 옹알이 (0)에서는 replacingOccurrences(of: "aya", with: "1")로 모두 치환을 하였지만, 여기에서는 각각 1, 2, 3, 4로 치환해주었다.
아래 코드에서 반복문과 map 함수를 쓴 부분이 옹알이 (0)에서 쓰인 흐름과 같다. map에서는 aya, ye, woo, ma 가 아닌 음절이 들어가 있는 경우, Int로 변환을 할 수 없기 때문에 그 부분을 ""로 바꿔주고, 마지막에 필터로 ""가 아닌 것들만 골라내어 innerBabbling에는 aya, ye, woo, ma만 들어간 것들만 남아있게 된다.
아래 중복 검사에서는 "1234", "23", "22", "33" 이렇게 되어 있는 String 값을 하나씩 확인해주는 과정을 거친다.
첫 번째 원소의 경우 1과 2, 1과 3, 1과 4, 2와 3, 2와 4 마지막으로 3과 4를 모두 확인해주게 되고, 중간에 같은 값이 있으면 break로 탈출한다. 이상 없을 경우 answer += 1을 누적하여 합해준다.
마지막으로 answer를 리턴하면 답안 도출이 완료된다.
3. 코드
import Foundation
func solution(_ babbling:[String]) -> Int {
var innerBabbling = babbling
var answer = 0
for i in 0 ... innerBabbling.count - 1 {
innerBabbling[i] = innerBabbling[i].replacingOccurrences(of: "aya", with: "1")
innerBabbling[i] = innerBabbling[i].replacingOccurrences(of: "ye", with: "2")
innerBabbling[i] = innerBabbling[i].replacingOccurrences(of: "woo", with: "3")
innerBabbling[i] = innerBabbling[i].replacingOccurrences(of: "ma", with: "4")
}
innerBabbling = innerBabbling.map({
if Int($0) != nil {
return $0
}
return ""
}).filter({ $0 != "" })
if innerBabbling.count == 0 {
return 0
}
for i in 0 ... innerBabbling.count - 1 {
// 중복 검사
for (index, j) in innerBabbling[i].enumerated() {
if innerBabbling[i].count == 1 {
answer += 1
break
}
if index > 0 && j == Array(innerBabbling[i])[index - 1] {
break
} else if index == innerBabbling[i].count - 1 && j != Array(innerBabbling[i])[index - 1] {
answer += 1
break
}
}
}
return answer
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 문자열 나누기(lv. 1) (0) | 2023.02.20 |
---|---|
[Swift] 프로그래머스 과일 장수(lv. 1) (0) | 2023.02.18 |
[Swift] 프로그래머스 신규 아이디 추천(lv. 1) (0) | 2023.02.16 |
[Swift] 프로그래머스 기사단원의 무기(lv. 1) (0) | 2023.02.15 |
[Swift] 프로그래머스 크레인 인형뽑기 게임(lv. 1) (0) | 2023.02.14 |
댓글