📝 문제
> 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
https://programmers.co.kr/learn/courses/30/lessons/12930#
코딩테스트 연습 - 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을
programmers.co.kr
🎨 풀이
💡 첫 번째 시도 = 실패 코드 (테스트 2번만 맞은 경우)
def solution(s):
answer = ''
s = s.split(" ")
for i in range(len(s)) :
for j in range(len(s[i])) :
if j % 2 == 0:
answer += s[i][j].upper()
else : answer += s[i][j]
if i != (len(s) - 1) :
answer += ' '
return answer
> (여기서 딱 한줄만 추가하면 되는 거였다...,,)
코드 딱 한 줄만 더 추가하면 되는 거여서 밑에 정답 코드와 함께 풀이를 써두었다. 제출하면 테스트 2번만 통과가 되길래 왜 안되는 거지..,, 하고 좀 도움을 받고자 질문하기 쪽에 들어가봤다. 거기 가니까 "문제에 s가 다 소문자라는 말이 없다" 라는 힌트가 있었다. 그 힌트를 보자마자 와 놓친게 이거구나 라는 생각이 들어서 바로 한 줄을 딱 추가해주었더니 문제가 풀렸다. 정말 공백 계산도 나름 다 했는데 이거를 체크 못한 게 아쉽기도 하면서, 그래도 풀었다는 게 기분이 좋기도 하면서 그렇다.
💡 두 번째 시도 = 성공 코드
def solution(s):
answer = ''
s = s.lower()
s = s.split(" ")
for i in range(len(s)) :
for j in range(len(s[i])) :
if j % 2 == 0:
answer += s[i][j].upper()
else : answer += s[i][j]
if i != (len(s) - 1) :
answer += ' '
return answer
>
1. s를 소문자로 통일시킨다.
2. s를 공백 기준으로 나눠서 리스트에 담는다.
3. 리스트 안의 단어의 인덱스를 i로 하는 for문을 돌린다. (단어 개수만큼)
4. s[i], 즉 단어 안의 문자의 인덱스를 j로 두는 for문을 돌린다.
5. j가 2로 나누어진다면 upper을 이용해서 대문자로 만든 후 answer에 더해준다.
6. j가 2로 나누어지지 않는다면 그냥 answer에 바로 더해준다. (소문자인 상태)
7. 만약 i가 맨 마지막에 있는 단어의 인덱스가 아니라면, answer에 공백을 추가해준다.
8. for문을 다 돌린 후 answer을 return 해준다.
* 이 코드도 하나 이상의 공백문자 케이스 처리 가능함!
=> s.split(" ") 이후에 보면 s에는 단어 사이에 공백이 하나일때는 그 공백이 사라지지만, 공백이 둘 이상이면 하나를 제외한 나머지 공백들은 '' 이렇게 s에 들어가있다. 밑의 예시를 보면 이해하기가 더 쉽다. hello와 world 사이에 공백이 3개라서, 2개는 '','' 형태로 s에 들어와있다. 그래서 나중에 for문을 돌게 되니까 공백 추가도 되는 것이다.

끝~
⭐ 느낀점
> 뿌듯하다. 그동안 못풀던 문제였는데, 오늘 이렇게 풀어버리니까 마음이 시원하다. 딱 한 줄 추가하면 되는 거였다니 이게 참 허무.,,,?는 아니고 좀 아쉬운 느낌?! 내가 직접 찾아서 풀었으면 더 속이 시원하고 좋았을 것 같다. 하지만 지금도 좋다. 그래도 좀 성장한 기분이 든다. 다음에 문제 풀 때는 저런 말이 있는지 없는지 파악을 제대로 해야할 것 같다. 좋았다~!
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 2] 최솟값 만들기 (파이썬) (0) | 2022.05.03 |
---|---|
[프로그래머스 / Level 2] 최댓값과 최솟값 (파이썬) (0) | 2022.05.02 |
[프로그래머스 / Level 1] 약수의 합 (파이썬) (0) | 2022.04.30 |
[프로그래머스 / Level 1] 최대공약수와 최소공배수 (파이썬) (0) | 2022.04.29 |
[프로그래머스 / Level 1] 제일 작은 수 제거하기 (파이썬) (0) | 2022.04.28 |