알고리즘/코드워

[python]Mumbling

(ㅇㅅㅎ) 2020. 10. 29. 23:03
728x90
반응형

www.codewars.com/kata/5667e8f4e3f572a8f2000039/train/python

 

Codewars: Achieve mastery through challenge

Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.

www.codewars.com

이 문제는 문자열을 특정 규칙에 적용하여 변경한 뒤 리턴해야 합니다.

 

여기서의 특정한 규칙은 문자열 안의 문자 순서만큼 반복한 뒤 '-'로 연결합니다. 그리고 반복하는 첫 번째 문자는 대문자로 나머지는 소문자로 변경합니다.

 

입력 문자열이 '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 사용 예시
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