본문 바로가기

Algorithm/Programmers lv.1

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

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

처음에는 이렇게 풀었는데 계속 오류가 나온다.

s = "try hello world"

list = s.split()

for i in list:
    for j in range(len(i)):
        if j % 2 == 0:
            i[j] = i[j].upper()

print(list)

 

Traceback (most recent call last):
  File "c:\Users\user\Desktop\Programmers\이상한 문자 만들기.py", line 8, in <module>
    i[j] = i[j].upper()
    ~^^^
TypeError: 'str' object does not support item assignment

 

지금 생각해보니 당연히 오류가 나올 수밖에 없다;;

문자열은 immutable타입이기 때문에 저런식으로 쓰면 에러가 발생한다.

 

따라서, 아래와 같이 코드를 수정해준다.

 

def solution(s):
    l = s.split()
    result =[]

    for i in l:
        word = list(i)
        for j in range(len(word)):
            if j % 2 == 0:
                word[j] = word[j].upper()
            else:
                word[j] = word[j].lower()
        result.append(''.join(word))

    return ' '.join(result)

 

하지만, 이렇게 쓰면 일부 테스트케이스를 통과하지 못한다.

그 이유는 s에 단어 사이에 여러 개의 공백문자가 입력될 경우를 고려하지 않아서였다.

위 코드라면 s에 아무리 많은 공백문자가 입력된다고 하더라도 1개의 공백문자만 입력된 채로 출력이 될 것이다.

아래와 같이 말이다.

# 입력
s = "try     hello world"

#출력 
"TrY HeLlO WoRlD"

 

따라서 코드를 살짝만 수정해줬다.

 

l = s.split() ---> l = s.split(' ')

 

이 둘의 차이가 뭘까? 

  • split()은 연속된 공백을 하나로 간주하고 빈 문자열을 생성하지 않는다
  • split(' ')는 모든 공백을 구분자로 사용하여 빈 문자열을 포함할 수 있다
s = "try      hello world"

# split() 사용
l1 = s.split()
print(l1)  # 출력: ['try', 'hello', 'world']

# split(' ') 사용
l2 = s.split(' ')
print(l2)  # 출력: ['try', '', '', '', '', '', 'hello', 'world']

 

 

 

따라서, 결과적으로 아래의 코드로 제출하면 정답이다.

def solution(s):
    l = s.split(' ')
    result =[]

    for i in l:
        word = list(i)
        for j in range(len(word)):
            if j % 2 == 0:
                word[j] = word[j].upper()
            else:
                word[j] = word[j].lower()
        result.append(''.join(word))

    return ' '.join(result)