MyPrograming
프로그래머스-파이썬 (이상한 문자 만들기) 본문
반응형
Q. 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
<제한사항>
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
<예시>
<예시설명>
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
<내 풀이>
불합격 코드
def solution(s):
answer = ''
split_s = list(s)
stack = 0
for i in range(len(split_s)):
if stack % 2 == 0:
stack +=1
split_s[i] = split_s[i].upper()
elif stack % 2 != 0:
stack += 1
split_s[i] = split_s[i].lower()
elif split_s[i] == ' ':
stack = 0
answer = ''.join(split_s)
return answer
통과되기 전에 작성했던 코드이다.
if문으로 각 상황의 조건에 따른 분기를 시켜서 공백이 나올 경우 스택을 0으로 초기화시켜서 각 문자열의 인덱스를
홀수, 짝수로 구분하려 했다. 하지만 스택을 pirnt()하여 확인해보니 위 처럼 작성했을 때는 공백을 만나도 스택이 0으로 초기화되지 않고 그대로 +1이 증가되는 상황을 파악하였다.
합격 코드
def solution(s):
answer = ''
split_s = list(s)
stack = 0
for i in range(len(split_s)):
if split_s[i] != " ":
if stack % 2 == 0:
split_s[i] = split_s[i].upper()
stack += 1
else:
split_s[i] = split_s[i].lower()
stack += 1
else:
stack = 0
answer = ''.join(split_s)
return answer
가만히 고민해보니 가장 먼저 체크해야 할 것이 해당 인덱스의 문자열이 공백인지 아닌지를 우선 체크한 후,
그 인덱스의 짝수, 홀수를 체크해야 알맞은 알고리즘이 되는 것이었다. 입출력 예시만 보고 판단한 것이 화근이였다...
문제 전체를 차근차근 읽어보고 완벽하게 이해하는 연습을 우선으로 해야겠다.
반응형
'Python > 알고리즘' 카테고리의 다른 글
프로그래머스-파이썬 (문자열 내 마음대로 정렬하기) (0) | 2021.01.27 |
---|---|
프로그래머스-파이썬 (예산) (0) | 2021.01.27 |
프로그래머스-파이썬 (두 개 뽑아서 더하기) (0) | 2021.01.25 |
프로그래머스-파이썬 (크레인 인형뽑기) (0) | 2021.01.20 |
알고리즘 수행시간 체크 (0) | 2021.01.18 |