algo lev-1 이상한 문자 만들기 (python)

1 minute read

문자열 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한 다른 문자열을 만들어 내는 것)

Categories:

Updated:

Comments