algo lev-1 이상한 문자 만들기 (python)
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
(제한: 단어(공백)별로 짝/홀수 인덱스를 판단해야 함)
출처 : 프로그래머스 Level1
내가 푼 풀이
1차 시도.py
우선 문자열을 단어별로 나눠야 할 것 같아서, split(‘ ‘) 로 문자열을 쪼갠 후, 각 단어의 홀/짝 알파벳을 파악하도록 문제를 해결했다.
def solution(s):
charlist = []
for char in s.split(' ') :
idx = 0
for i in char:
if idx % 2 == 0:
charlist.append(i.upper())
else :
charlist.append(i.lower())
idx += 1
charlist.append(" ")
charlist.pop()
#맨 마지막의 공백을 없애주기 위해 pop()
return "".join(charlist)
이중for문이 찝찝해서 다시 풀었다.
2차 시도.py
def solution(s):
charlist = ""
idx = 0
for i in s:
if i.isalpha():
idx += 1
if idx % 2 != 0:
charlist += i.upper()
else :
charlist += i.lower()
else:
idx = 0
charlist += ' '
continue
return charlist
앞에서 부터 읽으면서 알파벳이 아니라 공백이 나오면 continue하고 홀짝을 판단할 idx를 갱신하는 방식으로 바꿨다. 또 새로운 리스트에 값을 더하는 것 말고, 빈 문자열에 +
연산자 문자를 더해 문자열을 만들었다.
다른 사람의 풀이
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(' ')])
!!!
내 첫 풀이와 비슷하지만 인덱스 값을 따로 주지않고, enumerate()를 활용해서 한 번에 index값을 받아버린다는 점이 다르다! python은 역시 한 줄 풀이가 간지… ㅋㅋㅋㅋㅋ
배운점
1. string.replace() 는 원본 string을 바꿔주는 게 아니다!!
-
문제를 풀면서 문자열안에 있는 문자를 직접 바꾸고 싶어
s.replace()
를 시도했는데 잘 안됐다. s.replace(i, i.upper()) 왜 안되는 거지?.? -
찾아보니 replace()는 원본 문자열을 바꿔주는 게 아니라 값을 바꾼 새로운 문자열을 반환하는 함수였다. 즉 s.replace(i, i.upper())를 하면 s 원본이 아닌 다른 새로운 문자열을 반환하는 것…!!! 그래서 안됐던 거였음
replace() is an inbuilt function in Python programming language that returns a copy of the string where all occurrences of a substring is replaced with another substring.
출처 : GeeksforGeeks
a = "Life is too short"
a1 = a.replace("Life", "Your leg")
print(a) # Life is too short
print(a1) # Your leg is too short
2. 문자열, 튜플은 그 요소값을 변경할 수 없는 immutable한 자료형이다
- 문자열은 리스트와 달리
string1[3] = 'k'
이렇게 요소를 변경할 수 없다. - 대신 슬라이싱slicing이나 replace()등등을 통해 값을 변경할 수 있다. (사실 copy한 다른 문자열을 만들어 내는 것)
Comments