https://www.codewars.com/kata/520b9d2ad5c005041100000f/train/python
Codewars - Achieve mastery through coding practice and developer mentorship
A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!
www.codewars.com
이번엔 5kyu 문제가 나왔다. 그렇게 어려워 보이진 않는데 아래 태그를 보니 정규식을 사용해서 풀라고 되어있다.
파이썬 정규식.. 전혀 모르는 부분이다.. 일단 각 문자들을 배열에 집어넣어서 문자들을 reverse 하고, for loop으로 각 엘리먼트 제일 뒤에 'ay'를 추가해 준 다음에 다시 문자열로 뱉으면 될거라 생각했는데, 정규식으로 한번 생각을 해봐야겠다.
정규식을 쓰면.. 일단 모든 각 문자들의 순서를 뒤집고, 그리고 뒤에 ay를 붙여주면 된다.
검색을 하다가 정규식은 re.sub() 이라는 라이브러리를 사용한다는걸 알았다. 처음에는 패턴, 그리고 replace, 그리고 바꿀문자, 이런식으로 넣어주면 되는거 같다.
대충 정규식 사용법은 알았다.
\b(\w+)\b 이걸로 단어 하나씩 캡쳐하고, \1로 캡쳐한거 뒤에 ay를 추가한다 이런식으로 쓸 수 있었다.
import re
def pig_it(text):
return re.sub(r'\b(\w*)\b', r'\1ay', ' '.join([str[::-1] for str in text.split(" ")]))
아 실패했다.. 문장 전체를 뒤집는게 아니라, Pig에서 제일 앞에 있는애를 제일 뒤로 보내고 그리고 ay를 붙이는거다..
pig_it('Pig latin is cool') # igPay atinlay siay oolcay
다시풀었다..
\w만 쓰면 케릭터 하나를 잡는거고 \w* 는 그 외 나머지인데 케릭터가 한개 이상인 단어, \w+ 나머지인데, 케릭터가 0개 이상 즉, 공백도 캡쳐한다.
그리고 캡쳐한건 순서대로 \1 \2 이렇게 운용 가능.
import re
def pig_it(text):
return re.sub(r'\b(\w)(\w*)\b', r'\2\1ay', text)
칭찬을 많이 받은 답변은 아래와 같다.
정규식으로 풀어야만 하는건 아니었나 싶은데
isapha()는 찾아보니 문자열을 체크해주고 True False를 반환한다고 한다.
def pig_it(text):
lst = text.split()
return ' '.join( [word[1:] + word[:1] + 'ay' if word.isalpha() else word for word in lst])
'알고리즘' 카테고리의 다른 글
[CodeWars] Factorial - 7Kyu (0) | 2024.12.05 |
---|---|
[CodeWars] Multiplication table - 6Kyu (0) | 2024.12.05 |
[CodeWars] Square Every Digit - 7Kyu (0) | 2024.12.05 |
[CodeWars] Does my number look big in this?- 6Kyu (0) | 2024.12.04 |
[CodeWars] Array.diff - 6Kyu (0) | 2024.12.04 |