본문 바로가기
Problem Solving

[Swift] 프로그래머스 문자열 나누기(lv. 1)

by DuncanKim 2023. 2. 20.
728x90

[Swift] 프로그래머스 문자열 나누기(lv. 1)

 

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

2. 접근

두 가지를 세주면 된다. 특정 글자가 나오는 횟수, 특정 글자가 아닌 것이 나오는 횟수.

그리고 문자열을 분리할 때마다, 그 횟수를 다시 세는 것이 필요하다.

 

아래 코드에서 반복문의 첫 번째 if문은 s의 끝까지 모두 반복이 끝났을 경우, 남아있던 배열을 답변 배열에 넣어주는 역할을 한다.

두 번째 if문은 count1, count2가 0일 경우, 즉 특정 x를 정하는 경우라고 할 수 있다.

tempFirst를 i번째 Character로 정하고, count1은 특정 x를 세는 counter라고 정의한다.

count2는 당연히 x가 아닌 글자를 센 counter라고 할 수 있는 것이다.

 

그 다음부터는 s를 차례로 읽어가면서 count1 또는 count2에 숫자를 더해간다. 만약 count1과 2가 같아진다면, 바로 tempArray에 있는 글자를 answer에 집어넣고 초기화시켜준다.

 

로직을 잘 분리하고, 구현하는 것에 초점을 맞추어 하나씩 구현하면 되는 '구현' 문제 였다.

 

 

3. 코드

import Foundation

func solution(_ s:String) -> Int {
    var answer = [String]()
    var count1 = 0
    var count2 = 0
    var innerS = Array(s)
    
    var tempFirst: Character = " "
    var tempArray = [Character]()
    for i in 0 ... innerS.count - 1 {
        if i == innerS.count - 1 {
            tempArray.append(innerS[i])
            answer.append(String(tempArray))
            break
        }
        if count1 == 0 && count2 == 0 {
            tempFirst = innerS[i]
            count1 += 1
            tempArray.append(innerS[i])
            continue
        }
        if innerS[i] != tempFirst {
            count2 += 1
            tempArray.append(innerS[i])
        } else {
            count1 += 1
            tempArray.append(innerS[i])
        }
        
        if count1 == count2 {
            answer.append(String(tempArray))
            count1 = 0
            count2 = 0
            tempArray = [Character]()
        }
    }
    return answer.count
}
728x90

댓글