본문 바로가기
알고리즘/프로그래머스

[python] 이상한 문자 만들기(연습문제)

by 민-Zero 2020. 6. 16.

문제는 매개변수로 전달받은 문자열 s를 공백에 따라 나뉘는 단어를 기준으로 단어의 짝수번째 문자는 대문자로, 홀수번째는 소문자로 바꾼 문자열을 리턴해야한다. 단어의 첫번째 문자는 0번 인덱스로 취급하여 짝수로 처리해야 한다.

이때 주의할점은 단어 사이의 공백이 1개가 아닐수도 있고 문자열을 반환할때 해당 공백의 갯수도 그대로 반환해주어야 문제가 해결된다.

 

설계 및 구현

구현을 위해 주어진 함수에는 변경해야 하는 문자열 s 가 매개변수로 주어지는 간단한 모습이다.

구현 내용을 생각해보면 주어진 문자열의 단어를 구분할때 공백을 사용하므로 split을 사용해 단어만 추출했었다. 하지만 그럴경우 공백의 개수가 1개가 아닐경우 정상적으로 문제가 풀리지 않아 주어진 문자열을 전부 잘라내 공백일때는 무시하고 공백이 아닐경우 인덱스를 세서 대,소문자로 변경하면된다. 그런다음 공백을 유지한체로 다시 문자열로 변경해주면 된다.

① 주어진 문자열 s를 리스트로 변환

② 인덱스를 카운트할 새로운 변수를 생성하여 공백이 아닐경우에만 세고 다시 공백이 나오면 초기화하여 반복하여 대소문자 변경에 활용

③ 변경한 리스트의 원소들을 다시 문자열로 변환하여 반환

 

테스트를 위해 공백을 여러개 사용하여 임의의 문자열로 테스트를 진행했다.

①을 수행하기 위해 주어진 문자열을 리스트로 형변환시켜 모든 공백을 유지하여 변형해주었다.

②를 수행하기 위해 count라는 변수를 생성하고 공백을 만나게 되면 0으로 초기화하고 공백이 아닐경우 count를 증가시켜 단어의 인덱스로 활용해 대소문자로 변경을 수행한다. 이때 변경한 문자들을 다시 문자열로 결합해야하기 때문에 enumerate를 사용하여 리스트의 인덱스를 통해 원소의 값을 변경해 주었다.

③문자의 변경이 완료된 answer란 리스트를 join을 통해 하나의 문자열로 합쳐 해당 문자열을 반환하면 된다.

 

그럼 채점을 무리없이 통과할 수 있다.

댓글