[프로그래머스 Lv1] 이상한 문자 만들기(python)

이진규·2022년 1월 12일
1

문제

https://programmers.co.kr/learn/courses/30/lessons/12930

나의 코드

"""
1. 아이디어
입력받은 문자열을 공백을 기준으로 나누어서 반복문을 돌려 각각 대문자와 소문자로 바꾸어 준다. 
중간에 공백도 출력하기 위해서 미리 문자열의 길이를 입력받아 길이-1 만큼의 공백도 중간 중간 넣어주도록 한다.

2. 시간복잡도
O(n^2)
"""

def solution(s):
    
    result = ''
    string = s.split(' ')
    cnt = len(string)
    
    for char in string:
        
        for idx in range(len(char)):
            if idx % 2 == 0:
                result += char[idx].upper()
            else:
                result += char[idx].lower()
        
        if cnt != 1:
            result += ' '
            cnt -= 1
            
    return result

느낀점

쉬운 문제이긴 하나 문법의 이해가 떨어지면 난감한 문제이다. 또한 문제를 제대로 안읽어서 대문자와 소문자로 각각 바꾸어야 하는데 소문자로 바꾸는 걸 읽지 못해서 섣불리 코드를 썼다가 낭패를 봤다. 문제를 제대로 읽는 습관을 들여야 할 것 같다.

split()와 split(' ')는 다르다 구분하자!

엉뚱한 곳에서 시간 낭비 했는데 바로 s.split(' ') 한 부분이다.
처음에는 매개변수 없이 s.split() 으로 해서 100점이 안나왔는데,
그 이유는 s.split()으로 하면 모든 공백을 없애버리기 때문에 100점이 안나왔던 것이다.
문제의 답은 공백을 포함한 문자가 들어오면 마지막에 그 공백도 출력해줘야 하는 것처럼 보인다.
s.split(' ')는 공백을 하나만 기준을 없애기 때문에 공백은 하나만 제외하고 나머지 공백은 같이 출력이 된다.

예를들면 예제와 같이 "try hello world"와 같은 문자는 상관이 없지만
"try    hello world"가 들어오면 "TrY    HeLlO WoRlD"와 같이 출력이 돼야 하는데 s.split()을 쓰면 "TrY HeLlO WoRlD"와 같이 출력이 된다.

upper()과 lower()는 부분 문자열을 대문자, 소문자 변경을 지원하지 않는 것 같다.

예를 들면


string = "sentence"
length = len(string)

for idx in range(length):
    string[idx] = string[idx].upper()
    

같이 할려고 했으나 바뀌지 않았다. 그래서 다음과 같이


string = "sentence"
length = len(string)
tmp_string = ''

for idx in range(length):
    tmp_string += string[idx].upper()

새로운 문자열 변수를 만들어서 + 연산을 이용해서 더해주는 형식으로 해야한다.

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글