본문 바로가기
Problem Solving

[Swift] 프로그래머스 옹알이 (2)(lv. 1)

by DuncanKim 2023. 2. 17.
728x90

[Swift] 프로그래머스 옹알이 (2)(lv. 1)

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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

댓글