DataScience
[LV1] 이상한 문자 만들기- Python 본문
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예#1
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
입출력 예시

풀이 및 코드 리뷰
내가 제출한 답
def solution(s):
result = []
answer = s.split(" ")
for i in range(len(answer)):
for j in range(len(answer[i])):
if j % 2 == 0 :
result.append(answer[i][j].upper())
else :
result.append(answer[i][j].lower())
result.append(" ")
result.pop()
return "".join(result)
- 입력값을 공백을 기준으로 나눠서 각각의 단어를 인덱스의 위치에 따라 홀수와 짝수로 나눠서 대문자 소문자를 하였다. 그러나 문제가 발생하였는데
- 처음 split을 사용하여 공백을 없애고 반복문을 사용하여 모든 문자열을 각각의 문자로 바꿨기에 각각의 문자의 기준이 사라져 다시 join하려고 하였을때 "TrYHeLlOWoRlD"의 결과를 나왔다. 그래서 첫번째 반복문이 끝날때 공백을 추가하여 구분하였으나 마지막에 "TrY HeLlO WoRlD "와 같이 공간이 같이 생겨 어쩔수 없이 마지막에 pop()을 사용하여 제거하였다.
- 리뷰를 하면서 느낀점은 좀더 깔끔하게 해결할수 있었는데 무언가 억지로 답을 껴맞춘 느낌이 든다.
다른 사람의 풀이1 (반복문 사용)
def toWeirdCase(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))
- 답을 간추린것도 중요하지만 여기서 중요한 것은 enumerate()를 사용하여 문자에 번호를 붙인것과 내가 고민이였던 공백을 ["a", "b"], ["c", "d"] → ["ab"], ["cd"] → "ab cd"와 같이 한번에 join을 하는 것이 아닌 각각의 문자를 map을 사용하여 합치고 최종적으로 " ".join()을 사용하여 결과를 산출하였다.
다른 사람의 풀이2 (lambda 사용)
def toWeirdCase(s):
a=[]
s=s.split(" ")
for i in range(len(s)):
for j in range(len(s[i])):
if j%2==0:
a.append(s[i][j].upper())
else:
a.append(s[i][j].lower())
a.append(" ")
c="".join(a[:-1])
return c
result = ["a", "b", " ", "c", "d", " "]
"".join(result)
>>> "ab cd "
"".join(a[:-1]) # 마지막 공백을 제외한 나머지만 결합
>>> "ab cd"
- 내가 pop을 사용하여 마지막 공백을 제거했다면 여기서는 슬라이싱[:-1]을 사용하여 해결하였다.
참고자료
1. enumerate() : 인덱스와 원소를 동시에 접근하면서 인덱스 번호와 원소를 tuple형태로 반환
A = ["A", "B", "C"]
for i, a in enumerate(A):
print(i, a)
>>> 0 A
1 B
2 C
'Coding Review > programmers' 카테고리의 다른 글
[Lv2] N개의 최소공배수 (0) | 2023.01.03 |
---|---|
[LV1] 최소직사각형- Python (0) | 2022.10.19 |
[LV1] 최대공약수와 최소공배수 - Python (1) | 2022.10.13 |
[LV0] 숨어있는 숫자의 덧셈 (2) - Python (0) | 2022.10.10 |
[LV2] 위장 - python (해시) (2) | 2022.10.05 |