티스토리 뷰

반응형

 

 

 

 

프로그래머스 레벨1, 이상한문자 만들기 문제 링크 ▼

 

코딩테스트 연습 - 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을

programmers.co.kr

 

 


프로그래머스 이상한문자 만들기 문제설명

프로그래머스의 1단계 기초문제, 이상한문자 만들기는 주어진 문자열을 특정 조건에 따라 변형한 후 반환하는 문제입니다. 입출력 예시는 아래와 같습니다.

try hello world -> TrY HeLlO WoRlD

위와 같이 주어진 문자열을 공백 단위로 보는데, 각 단어의 짝수번째는 대문자로, 홀수번째는 소문자로 변형해서 반환해야 합니다. 

자세한 내용은 본 문제 링크를 통해서 확인하시기 바랍니다. 바로 swift언어로 문제 풀어보겠습니다.

 

 

 


프로그래머스 이상한문자 만들기 swift 문제풀이
String extension 활용

이번 문제 대부분의 코드는 String extension에서 작성해보겠습니다.

3행) String타입에서 접근 가능한 멤버변수, answer는 본 문제에서 요구하는 문자열을 반환할 예정입니다. 

4행) isUpperCasePos는 현재 순회하는 문자가 대문자여야 하는지, 소문자여야 하는지를 체크하는데 사용합니다.

 

5행) reduce는 초기값을 지정하고, 배열(여기서는 String)의 요소를 하나하나 순회, 특정 연산을 통해 누적된 값을 반환하고자 할때 사용할 수 있습니다. "" 문자열에서 시작해서 현재 문자열을 주어진 규칙에 따라 변형할 예정입니다. 클로져 블록 첫줄에 정의된 string / char는 각각 누적된 값이 저장될 문자열 / 현재 문자열에서 순회중인 문자입니다.

 

6 ~ 10행) 공백이 있을 경우에는 문자열 누적중인 string 변수에 공백 한칸을 추가 + 다음 단어 체크를 위해 isUppserCasePos를 초기화 시켜주고 넘어갑니다.

 

12 ~ 18행) 12행에서 현재 순회중인 문자의 ascii 코드 값을 추출하고, 있는데 잘못 들어간 코드입니다. 😂 아스키코드 값을 구

할때 사용할 수 있는 코드인데 넘어가주세요 ㅎㅎ 본 문제를 푸는데 필요없는 코드입니다. 이어서 isUpperCaedPos의 true/false 여부에 따라 대문자/소문자로 변형시켜줍니다. 대/소문자 변형은 String타입의 uppercased(), lowercased()를 통해 쉽게 적용할 수 있습니다. 이후 각 단어의 대문자 다음은 소문자 / 소문자 다음은 대문자가 와야 하므로 isUpperCasePos를 토글 시켜줍니다.

Bool타입의 멤버 메서드, toggle() 함수는 Bool 값을 토글 시켜주는 역할을 합니다. toggle() 사용 없이 조건문이나 삼항연산자를 통해 토글시켜도 무방합니다.

 

 

 

위 solution 메서드에서 해야할 것은 딱 하나입니다.

String타입 인자, s를 통해 위 String extension에서 구현한 anwer 변수를 반환시키면 끝입니다.

 

본 문제, 이상한문자 만들기 제출결과 & 작성한 swift 전체코드는 아래와 같습니다. 

 

 

 


extension String {
    var answer: String {
        var isUpperCasePos: Bool = true
        return self.reduce(into: "") { (string, char) in
            if char == " " { 
                string += " "
                isUpperCasePos = true
                return
            }
                                      
            let ascii = Int(char.asciiValue!)
            if isUpperCasePos {
                string += "\(char)".uppercased()
            } else {
                string += "\(char)".lowercased()
            }
            isUpperCasePos.toggle()
        }
    }
}

func solution(_ s:String) -> String {
    return s.answer
}

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함