본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/ALGORITHM

[내일배움캠프] 데일리 루틴(iOS_3회차) - 이상한 문자 만들기

이미지를 클릭하면 코딩테스트 페이지로 이동합니다

 

내 풀이

func solution(_ s:String) -> String {
    var arr: [String] = []
    var x = 0
    for i in s {
        if x % 2 == 0 {
            arr.append(String(i.uppercased()))
        } else {
            arr.append(String(i.lowercased()))
        }
        x += 1
        if i == " " {
            x = 0
        }
    }
    return arr.joined()
}

 

 

- 빈 배열 arr 선언

- 변수 x를 0으로 초기화,

   변수는 현재 단어에서 몇 번째 알파벳인지를 나타냄 

- 문자열 s를 반복문을 통해 순회

- 각 문자열의 문자가 짝수번째 알파벳인지 홀수번째 알파벳인지판별

- 짝수번째 알파벳이면 대문자로 변환하여 배열 arr에 추가 

   홀수번째 알파벳이면 소문자로 변환하여 배열 arr에 추가

- x 값을 1 증가 

   다음 문자가 몇 번째 알파벳인지를 나타내기 위함

- 만약 현재 문자가 공백(" ")인 경우, x 값을 0으로 초기화

   다음 단어의 첫 번째 알파벳이라는 것을 나타냄

- 반복문이 끝나면 배열 arr의 각 요소를 합쳐서 하나의 문자열로 만들어 반환

 

 

또 다른 풀이

func solution(_ s: String) -> String {
    var result = ""
    var isEven = true 
    
    for char in s {
        // 공백인 경우
        if char == " " {
            isEven = true 
            result.append(char) 
        } else {
            // 알파벳인 경우
            if isEven {
                result.append(char.uppercased()) 
            } else {
                result.append(char.lowercased()) 
            }
            isEven.toggle() 
        }
    }
    
    return result
}

 

- 위 입력 문자열을 순회하며 각 문자를 처리

- 문자가 공백인 경우, isEven 플래그를 true로 설정하여 다음 단어의 첫 글자가 짝수번째 문자임을 나타냄

   공백 문자를 결과 - 문자열에 그대로 추가

- 문자가 알파벳인 경우에는 isEven 플래그의 값에 따라 대문자 또는 소문자로 변환하여 결과를 문자열에 추가

    isEven이 true인 경우: 문자를 대문자로 변환하여 추가

    isEven이 false인 경우: 문자를 소문자로 변환하여 추가

- 각 문자를 처리한 후, isEven 플래그를 토글하여 다음 문자의 짝수/홀수 여부를 업데이트

- 문자열 처리 완료 시 최종 문자열을 반환

 

 

 

첫 번째 함수는 

- 문자열을 하나씩 순회하며 각 문자가 짝수번째인지 홀수번째인지를 판단

- 대문자 또는 소문자로 변환한 후 배열에 추가

- 배열을 결합하여 문자열을 생성

이러한 과정을 거치며, 진행 방식을 확인했을 때 불필요한 배열 조작으로 성능이 떨어질 수 있을 것 같다.

 

하지만 그에 반해 두 번째 함수는 입력된 문자열을 순회하면서 짝수번째 문자인지를 판단하여 대소문자를 변환한 후 바로 결과 문자열에 추가한다. 그렇기 때문에 첫 번째 함수와 비교 했을 때 배열을 사용하는 과정이 없어 더 효율적일 것으로 보인다. 

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31