본문 바로가기

Swift Algorithms

5. Reverse every other word

Reverse every other word

단어를 역순으로 바꾸는 방법

 

var sampleSentence = "Lets start today by completing a very interesting challenge"
func reverseWordsInSentence (_ sentence : String) -> String {
    let allWords  = sampleSentence.components(separatedBy: " ")

    var newSentence = ""

    for word in allWords {
         if newSentence != "" {
            newSentence += " "
        }
        let reverseWord = String(word.reversed())
        newSentence += reverseWord
    }
    return newSentence
}
print(reverseWordsInSentence(sampleSentence))
// steL trats yadot yb gnitelpmoc a yrev gnitseretni egnellahc

 

sampleSentence라는 변수를 만들고 역순으로 바꾸자 하는 문장을 넣습니다. 함수를 만들고 allwords라는 상수를 만들고 components(separatedBy: " ")를 통해 공백 별로 나누어 배열에 넣는 메서드를 실행시킵니다.

이를 실행 시키면 ["Lets", "start", "today", "by", "completing", "a", "very", "interesting", "challenge] 와 같은 배열이 생깁니다.

for in 루프를 통해 배열에 들어있는 각 단어를 newSentence에 넣습니다. 배열의 처음 단어인 "Lets"를 넣으면 처음 newSentence는 " "로 설정되어있기 때문에 newSentence += " "실행이 안되고 다음 줄로 넘어갑니다. 

reverseWord라는 상수에 "Lets"를 역순으로 바꾼 "steL"을 넣고 다시 newSentence에 넣습니다.

처음 for in 루프로 돌아와 배열의 두번째 단어 "start"를 넣습니다. 이제 newSentence에는 "steL"이라는 단어가 들어가 있기 때문에 공백이 아니게 되고  newSentence += " "를 실행시켜 공백을 만들어줍니다.

reverseWord에서  "start"의 역순인 "trats"를 넣고 newSentence에 넣어줍니다.

이 방법으로 계속 반복하면 steL trats yadot yb gnitelpmoc a yrev gnitseretni egnellahc 값이 나옵니다. 

 

var sampleSentence = "Lets start today by completing a very interesting challenge"
func reverseWordsInSentence (_ sentence : String) -> String {
    let allWords  = sampleSentence.components(separatedBy: " ")

    var newSentence = ""

    for index in 0...allWords.count - 1 {
         let word = allWords[index]
         if newSentence != "" {
            newSentence += " "
        }
        if index % 2 == 1 {
            let reverseWord = String(word.reversed())
            newSentence += reverseWord
        }else {
            newSentence += word
        }
    }
    return newSentence
}
print(reverseWordsInSentence(sampleSentence))
// Lets trats today yb completing a very gnitseretni challenge

 

이번에는 홀수 단어에만 단어의 역순을 만드는 방법입니다. 위의 예시와 같이 공백을 기준으로 나누는 ["Lets", "start", "today", "by", "completing", "a", "very", "interesting", "challenge] 단어 배열을 만듭니다. 이번에는 index 번호를 기준으로 for in 루프를 돌립니다. 

처음에는 newSentence가 비어있기 때문에 아무것도 실행되지 않은 채 if 조건문에서 홀수 인지 짝수 인지 확인하는 조건문이 실행됩니다. 만약 홀수라면 단어를 역순으로 뒤집고 newSentence에 넣고 짝수라면 단어를 그냥 newSentence에 넣습니다.

계속 반복하게 된다면 Lets trats today yb completing a very gnitseretni challenge 단어의 짝수는 정상적으로 출력되고 홀수는 역순으로 배치됩니다.

 

var sampleSentence = "Lets start today by completing a very interesting challenge"
func reverseWordsInSentence (_ sentence : String) -> String {
    let allWords  = sampleSentence.components(separatedBy: " ")

    var newSentence = ""

    for index in 0...allWords.count - 1 {
         let word = allWords[index]
         if newSentence != "" {
            newSentence += " "
        }
        if index % 2 == 1 {
            let reverseWord = String(word.reversed())
            newSentence += reverseWord.stringByRemoveVowels()
        }else {
            newSentence += word.stringByRemoveVowels()
        }
    }

    return newSentence
}


extension String {
    func stringByRemoveVowels() -> String {


        var newWord = self

        for vowel in ["a", "e", "i", "o", "u"] {
            newWord = newWord.replacingOccurrences(of: vowel, with: "")
        }

        return newWord
    }
}

print(reverseWordsInSentence(sampleSentence))
// Lts trts tdy yb cmpltng  vry gntsrtn chllng

 

이번에는 위와같이 짝수는 정상적으로 홀수는 역순으로 출력되지만 모든 모음을 제외시키고 출력시키는 방법입니다. 위와 같은 코드에서 extension을 추가시킵니다. extension에 함수를 만들고 변수 newWord를 만든 후 for in 에서 replacingOccurrences을 통해 모든 모음을 공백으로 대체하는 newWord를 리턴시킵니다.

if 문으로 돌아와 reverseWord, word 뒤에 stringByRemoveVowels 메서드를 추가해주면 모음이 사라진 값을 출력해줍니다.

 

 

'Swift Algorithms' 카테고리의 다른 글

7. Filter, Map, Reduce Higher Order Functions  (0) 2020.07.04
6. Fibonacci Sequence  (0) 2020.07.03
4. Most Common Name in Array  (0) 2020.07.02
3. Factorials & Recursion  (0) 2020.06.23
2. Binary Search  (0) 2020.06.23