프로그래머스 level 1 이상한 문자 만들기
01 Jul 2021 | 기초 프로그래머스 TIL 나중에 살펴보기걸린 시간 : 3시간
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s | return |
---|---|
"try hello world" | "TrY HeLlO WoRlD" |
사고과정
이중 for문을 돌려서 처리한다.
def solution(s):
arr = s.split() #[try, hello, world]
arr1 =[]
arr2 =[]
for i in arr:#[try]
for j in range(0,len(i)):#t
if j%2 == 0:
arr1.append(i[j].upper())#짝수면대문자
else:
arr1.append(i[j].lower())#홀수면소문자
print(arr1)
''.join(arr1)
arr2 = ' '.join(arr1)
print(arr2)
return arr2
이렇게 하니까 출력값이 “T r Y H e L l O W o R l D”라고 나왔다.
변수 이름을 좀 더 직관적으로 고치고,
print문을 중간중간 넣어서 중간과정을 체크하고,
new_word를 배열이 아닌 문자열로 선언하고 위치를 for문 안으로 옮겼다.
이중 for문을 돌리면서 i를 숫자로 할 지, 배열의 원소로 할지에 대해서 다시한 번 생각해봤고
list, string 을 가지고 append, +=, join을 해가면서 한시간정도 삽질을했다.
join은 배열을 합쳐서 문자열로 만들어준다는 것을 다시 한 번 체득했다.
결과값이 TrY HeLlO WoRlD 라고 잘 나오는데 다른 테스트케이스에서는 틀렸다고 나와서
질문하기를 살펴보니까 split(‘ ‘)을 안쓰고 split()을 쓰면 공백이 여러개일때 하나로 합쳐져서 틀리는것이라고 해서 split() 대신에 split(‘ ‘)을 넣어줬더니 통과되었다!
제출 답안
def solution(s):
arr = s.split(' ') #['try', 'hello', 'world']
arr2 =[]
for word in arr: # 여기서 word는 try, hello, world가 된다.
print(word) # 문자열 try 출력
new_word =""
# 이 변수는 재사용하기때문에 새로고침하기 위해서 첫째 for문 사용 이후에 넣어줘야한다.
for i in range(0,len(word)):# 여기서 i는 0,1,2가 된다.
if i%2 == 0:
new_word += word[i].upper()#짝수면대문자
else:
new_word += word[i].lower()#홀수면소문자
arr2.append(''.join(new_word))
#한 글자씩 모아서 문자열로 만든 new_word들을 배열에 넣어준다.
answer = ' '.join(arr2) #이 배열을 문자열로 바꿔준다.
print(answer)
return answer
모범 답안
def toWeirdCase(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))
주요 포인트 및 생각해볼 점
enumerate함수를 이용한 풀이를 찾아서 설명을 한 번 더 들어보고 이용해봐야겠다.