Codewars Simple Pig Latin 알고리즘

2019-07-20

Pig Latin 알고리즘 문제는 각 단어의 첫 문자를 뒤로 옮긴 후 “ay”를 붙여야 한다.

물론 특수문자에는 붙으면 안된다.

예시

pig_it('Pig latin is cool') # igPay atinlay siay oolcay
pig_it('Hello world !')     # elloHay orldway !

풀이

def pig_it(text):
    result = ""
    add = 'ay '
    for word in text.split():
        if word[0].isalpha():
            result += word[1:] + word[0] + add
        else:
            result += word[0]
    return result.rstrip()

일단 처음에 풀었을 때는 띄어쓰기를 안해서 오류가 났다.

그래서 ‘ay’를 ‘ay ‘로 변경해서 단어가 끝나면 띄어쓰기가 되도록 했다.

이렇게 하면 마지막 단어에도 띄어쓰기가 되어 공백이 생겼다고 오류가 난다.

그래서 공백을 없애기 위해 return result.rstrip()으로 변경했다.

그러고 나니까 이제는 특수문자도 split을 하는 바람에 !ay와 같은 이상한 문자가 생기기 시작했다.

그래서 특수문자에는 ‘ay ‘가 붙지 않게 해줘야 했다.

그래서 isalpha()를 사용해서 일반 문자면 수식을 실행하게 만들었다.

그렇지 않으면 그냥 result에 그대로 붙였다.

text에 ‘Pig latin is cool’이라는 문장이 들어오면 text.split()를 통해 ‘Pig’, ‘latin’, ‘is’, ‘cool’로 나눈다.

for 문을 이용해 나눠진 각 단어를 하나씩만 word변수에 넣어준다.

그리고 word[0] 즉 단어의 제일 앞 문자가 일반 글자인지 특수문자인지 구분한다.

‘Pig’에서는 P를 의미한다.

word[1:]은 1부터 끝까지를 의미하는 단어다.

‘Pig’에서는 ‘ig’를 의미한다.

비어있는 result에 ‘ig’ + ‘P’ + ‘ay ‘를 더하는 수식인 것이다.

그러면 ‘igPay ‘라는 알고리즘이 원하는 값이 나온다.

이렇게 각 단어마다 atinlay siay oolcay 바꾸어 result에 계속 더하면 ‘igPay atinlay siay oolcay’가 완성된다.