OLD/Coding Test
[프로그래머스] level 1 : 이상한 문자 만들기
stranger95
2020. 2. 7. 10:26
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s | return |
"try hello world" | "TrY HeLlO WoRlD" |
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def solution(s):
answer = ''
idx = 0
for i in range(len(s)):
if s[i].isalpha():
if idx % 2 == 0:
answer += s[i].upper()
else : answer += s[i].lower()
idx += 1
else :
idx = 0
answer += ' '
return answer
|
cs |
코드해석
문자열 내 단어를 인덱스 idx를 사용하여 읽을건데요, 공백이 나오면 공백은 추가만 하고 idx는 갱신하도록 합니다. 짝수번이라면 대문자로, 홀수번이라면 소문자로 변환하여 answer에 추가합니다.
다른 사람의 풀이
1
2
|
def solution(s):
return ' '.join([''.join([c.upper() if i % 2 == 0 else c.lower() for i, c in enumerate(w)]) for w in s.split(' ')])
|
cs |
인덱스 값을 따로 부여하지 않고 enumerate 함수를 사용하여 한번에 인덱스와 해당하는 값을 받아 해결하였습니다.
enumerate
순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려줍니다.
split
문자열을 정해준 값을 기준으로 나눠줍니다. 디폴트는 공백입니다. 나누어진 각각의 문자열은 리스트에 원소로 하나씩 들어가게 됩니다.