programming

프로그래머스 이상한 문자 만들기 파이썬 풀이 해설


by Kitle · 2020. 07. 18.



원본 출처 프로그래머스 : https://programmers.co.kr/learn/courses/30/lessons/12930


문제 설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.


제한 사항

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

s return

try hello world TrY HeLlO WoRlD

입출력 예 설명

try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 TrY, HeLlO, WoRlD입니다. 따라서 TrY HeLlO WoRlD 를 리턴합니다.


[문제풀이]

def solution(s):
answer = ''
idx = 0
for str in s:
if str == ' ':
answer += ' '
idx = 0
else:
if idx == 0:
answer += str.upper()
idx = 1
elif idx == 1:
answer += str.lower()
idx = 0
return answer
자 풀이부터 보시죠.
여러 풀이가 있겠지만 여기서는 조금 다르게 풀어보았습니다.
idx 는 홀짝 판단을 위한 부분입니다. 문자열을 %2 로 나머지를 구할수도 있겠지만 각 단어마다 길이를 계산하고 나누어 더 복잡해질 수도 있어서 여기는 수동으로 해보았습니다.
for 문으로 문자열 전체를 돌며 한번에 판단할 수 있게 끔 하기 위해서입니다.
idx는 0부터 시작합니다. 0 이면 대문자로, 1이면 소문자로 번갈아가며 체크할 것입니다.
먼저 체크할 항목은 공백입니다. 첫 칸 부터 공백이 올 수 있으므로 가장 먼저 공백을 체크하고, 공백인 경우 그대로 문자열(결과열)에 공백을 추가해줍니다. idx는 0으로 변경해줍니다. for문을 돌며 1이 되어있을 수도있으므로 무조건 0으로 변환합니다.
두번째 입니다. 공백이 아니고 단어가 왔다면 인덱스는 0 또는 1입니다. 0이면 대문자로 바꾸고 index를 1로 바꿔줍니다. 반대로 1이면 소문자로 바꾸고 index를 0으로 줍니다. 변환 후에는 결과에 추가됩니다. 완성된 문자열을 for 문 모두 마치고 리턴해줍니다.
별로 좋은 풀이는 아닌것 같네요 ^^;

[또 다른 풀이]
물론 문자열을 공백기준으로 쪼개고 for문을 돌며 % 를 활용하여 홀짝 계산으로 할수도 있습니다. for문사이에 ' ' 공백을 껴넣을 수도있으나 맨 마지막 의 경우는 공백이 없을 수도 있어서 추가적인 처리가 필요합니다.