728x90
반응형
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
s | return |
"try hello world" | "TrY HeLlO WoRlD" |
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
풀이
이 문제는 단어(공백을 기준)별로 짝/홀수 인덱스를 판단하여 대/소문자 처리를 한다고 했으므로 먼저 s를 공백기준으로 잘라내야한다.
- Python에서 문자열을 자르는 방법은 문자열 슬라이싱과 split() 메서드가 있다.
- 어떠한 기준으로 문자열을 나눠야할 때는 split()을 쓰는게 좋다.
- split()의 default 매개변수는 ' ' 공백이다.
s_list = s.split()
이렇게 잘라진 문자열의 짝수 인덱스 자리는 "대문자", 홀수 인덱스 자리는 "소문자" 처리를 한다.
- 문자열을 대문자로 : upper()
- 문자열을 소문자로 : lower()
각 문자열을 변환하는 코드는 다음과 같다.
// s_list의 한 개의 요소를 s라고 가정
''.join([c.upper() if idx%2==0 else c.lower() for idx,c in enumerate(s)])
그리고 이 문자열들을 join()으로 하나의 문자열로 합친다. 단 기존의 공백 기준으로 나눴으므로 합칠 때 각 문자열 사이에 공백을 추가해야 한다.
- join() 메서드 사용법
// 리스트 = [1,2,3,4]
// 문자열.join(리스트)
// 결과 : 1문자열2문자열3문자열4
' '.join(변환된 문자열이 들어있는 리스트)
코드를 모두 합치면 다음과 같다.
def solution(s):
s_list = s.split(' ')
return ' '.join([''.join([i.upper() if idx%2==0 else i.lower() for idx,i in enumerate(e)]) for e in s_list])
map() 함수와 lambda를 사용하면 한줄로 코드를 작성할 수도 있다.
- lambda 식으로 문자열을 변환하는 함수 작성
- map함수로 lambda 함수 리스트에 적용
- map 객체 문자열로 변환
- 문자열 반환
return ' '.join(map(lambda x:''.join([i.upper() if idx%2==0 else i.lower() for idx,i in enumerate(x)]),s.split(" ")))
728x90
반응형
'코딩테스트 > Programmers' 카테고리의 다른 글
[Programmers/프로그래머스]예산 (2) | 2022.09.30 |
---|---|
[Programmers/프로그래머스]3진법 뒤집기 (0) | 2022.09.30 |
[Programmers/프로그래머스]같은 숫자는 싫어 (0) | 2022.09.29 |
[Programmers/프로그래머스]최대공약수와 최소공배수 (0) | 2022.09.29 |
[Programmers/프로그래머스]직사각형 별 찍기 (0) | 2022.09.29 |