https://school.programmers.co.kr/learn/courses/30/lessons/12951
<내코드 - 오답>
def solution(s):
s_list, result = list(s.split()), []
for token in s_list:
token_list = list(token)
if token_list[0].islower():
token_list[0] = token_list[0].upper()
for i in range(1, len(token_list)):
if token_list[i].isupper():
token_list[i] = token_list[i].lower()
result.append(''.join(token_list))
return ' '.join(result)
그냥 하라는대로만 작성했는데 반타작도 못함 GPT선생님께서는 두가지 말씀을 건내주셨다.
제시된 코드는 대부분의 경우에 잘 작동할 것 같지만, 두 가지 잠재적인 문제가 있습니다:
- 빈 문자열 처리: 입력 문자열 s에 연속된 공백이 있거나, 문자열의 시작이나 끝에 공백이 있는 경우, split() 메서드는 빈 문자열을 리스트에 포함시킬 수 있습니다. 이 경우, token_list[0]에 접근하려고 할 때 IndexError가 발생할 수 있습니다.
- 모든 문자가 대문자 또는 소문자인 경우: 문자열의 모든 문자가 대문자 또는 소문자인 경우에도 코드가 올바르게 작동할 것 같지만, 이러한 상황에서 불필요한 검사를 수행하게 됩니다.
아뿔싸 연속된 공백등 공백에 대한 처리가 미숙했다. 무지성 list(split())으로 인해 IndexError가 날 수 있다는 점을 지적해주셨다.
나머지는 불필요한 검사를 제거하라고 조언까지 해주셨다.
그리고 .split() 자체가 리스트를 반환해주기 때문에 굳이 list(s.split())을 쓰지 않아도 된다는점 이다.
<정해풀이1>
def solution(s):
s_list, result = s.split(" "), []
for token in s_list:
if token: # 빈 문자열이 아닌 경우에만 처리
token_list = list(token)
token_list[0] = token_list[0].upper() # 첫 글자를 대문자로
for i in range(1, len(token_list)):
token_list[i] = token_list[i].lower() # 나머지 글자를 소문자로
result.append(''.join(token_list))
else:
result.append(token) # 빈 문자열 추가
return ' '.join(result)
해당 코드도 나쁘지 않지만 capitalize 메소드를 사용해 문제를 해결할 수 있다.
<정해풀이2>
def solution(s):
return ' '.join([word.capitalize() for word in s.split(" ")])
array클래스 내부에 capitalize메소드를 사용하면 원하는대로 나온다는걸 알게되었다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers / Level2] 짝지어 제거하기 (0) | 2024.01.19 |
---|---|
[Programmers / Level2] 피보나치 수 (0) | 2024.01.18 |
[Programmers / Level2] 숫자의 표현 (0) | 2024.01.17 |
[Programmers / Level2] 이진 변환 반복하기 (0) | 2024.01.16 |
[Programmers / Level2] 올바른 괄호 (2) | 2024.01.15 |