www.codewars.com/kata/5667e8f4e3f572a8f2000039/train/python
이 문제는 문자열을 특정 규칙에 적용하여 변경한 뒤 리턴해야 합니다.
여기서의 특정한 규칙은 문자열 안의 문자 순서만큼 반복한 뒤 '-'로 연결합니다. 그리고 반복하는 첫 번째 문자는 대문자로 나머지는 소문자로 변경합니다.
입력 문자열이 'abc'일 경우 다음과 같습니다.
문자 순서 | 1 | 2 | 3 |
문자 | a | b | c |
A-Bb-Ccc
입력 문자열이 'RqaEzty'일 경우 다음과 같습니다.
문자 순서 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
문자 | R | q | a | E | z | t | y |
R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy
여기서 중요한 것은 첫 번째 문자를 대문자로 나머지는 소문자로 변경하는 부분입니다.
python에서는 문자열을 대문자로 바꾸어주는 좋은 기본 기능들이 있습니다.
'문자열'.upper()
: 주어진 문자열에서 모든 알파벳들을 대문자로 변환시킵니다.
'문자열'.capitalize()
: 주어진 문자열에서 맨 첫 글자를 대문자로 변환시킵니다.
'문자열'.title()
: 주어진 문자열에서 알파벳 외의 문자(숫자, 특수기호, 띄어쓰기 등)로 나누어져 있는 영단어들의 첫 글자를 모두 대문자로 변환시킵니다.
이 외에도 문자열을 이용하기 위해 편리한 메서드들이 있으며 upper()의 반대 격인 문자열의 모든 알파벳을 소문자로 변환시켜주는 것도 있습니다.
'문자열'.lower()
: 주어진 문자열에서 모든 알파벳들을 소문자로 변환시킵니다.
예시)
처음 이 문제를 풀 때에는 자릿수를 나타내는 변수 1개, for문, title()를 이용해서 문제를 풀었습니다.
하지만, 이 풀이법은 python을 제대로 이용하지 못한 코드라고 생각합니다. python의 for문에는 enumerate라는 좋은 기능이 있기 때문입니다.
* 여기서 answer[:-1]을 한 이유는 마지막 answer에 붙는 '-'을 제외한 채로 리턴하기 위해서였습니다.
enumerate
: 반복문 사용 시 몇 번째 반복문인지 알 수 있습니다. 다음과 같이 사용 가능합니다.
enumerate, title을 사용하면 다음과 같이 문제를 풀 수 있습니다.
하지만 answer의 마지막에 '-'이 추가되는 것이 신경 쓰일 수도 있습니다. 이럴 때 저는 answer를 문자열이 아닌 리스트로 설정한 뒤 join을 이용합니다.
'구분자'.join([리스트])
: 리스트에 특정 구분자를 추가하여 문자열로 변환시킵니다.
join을 이용한다면 한 줄로도 코딩할 수 있습니다.
하지만 굳이 이렇게 하실 필요는 없습니다. 이 문제는 이 외에도 풀 수 있는 방법이 여러 가지 있습니다. upper와 lower를 섞는 방법도 있고, capitalize를 사용하는 방법도 있습니다.
알고리즘 문제를 풀 때 속도와 메모리는 중요한 문제이지만, 공부를 하는 입장에서는 여러 가지 방법으로 문제로 접근해서 풀어보는 것이 어떨까요?
정답이 여러 가지인 편이 코딩을 하는데 즐거움을 더 준다고 생각합니다.
'알고리즘 > 코드워' 카테고리의 다른 글
[python]Number of People in the Bus (0) | 2020.11.04 |
---|---|
[python]Disemvowel Trolls (0) | 2020.11.02 |
[python]Complementary DNA (0) | 2020.10.28 |
[python]Take a Ten Minute Walk (0) | 2020.10.27 |
[python]List Filtering (0) | 2020.10.26 |