https://school.programmers.co.kr/learn/courses/30/lessons/12930
처음에는 이렇게 풀었는데 계속 오류가 나온다.
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)
'Algorithm > Programmers lv.1' 카테고리의 다른 글
[프로그래머스] 크기가 작은 부분 문자열 (0) | 2024.09.01 |
---|---|
[프로그래머스] 예산 (0) | 2024.08.31 |
[프로그래머스] 행렬의 덧셈 (0) | 2024.08.29 |
[프로그래머스] 문자열 다루기 기본(문자열을 리스트로 바꾸기, isdigit) (0) | 2024.08.28 |
[프로그래머스] 부족한 금액 계산하기 (0) | 2024.08.28 |