[Lv1] 이상한 문자 만들기

이말감·2021년 9월 9일
0

Programmers

목록 보기
3/32

프로그래머스 Lv1 이상한 문자 만들기

문제

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

  • 제한 사항
    문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
    첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

  • 입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

풀이

def solution(s):
    b = list(map(str, s.split(" ")))
    answer = ""
    for i in b :
        an = ""
        for j in range(len(i)) :
            if j % 2 == 0 :
                an += i[j].upper()
            else :
                an +=i[j].lower()
        answer += an + " " 
    answer = answer[:-1]
    return answer
  1. 제한 사항에서 단어별로 짝/홀수 인덱스를 판단해야 한다고 했으므로
    list(map(str, s.split(" ")))를 통해 각각 단어가 들어있는 리스트를 만든다.
    (여기서 굳이 list(map(str, .. 을 해주지 않고 s.split(" ")을 통해 s 문자열을 공백으로 split한 리스트를 반환할 수 있다)
  2. for문을 돌려서 해당 단어의 문자가 홀수번째인지 짝수번째인지에 따라 upper, lower를 이용하여 대문자, 소문자가 나오도록 한다.
  3. 한 단어가 끝나면 뒤에 공백이 있으므로 " " 공백을 추가하고
  4. 마지막 단어 뒤에 공백이 있으면 안되므로 리스트 슬라이싱을 통해 공백을 지운다.

1) 리스트 슬라이싱
리스트 슬라이싱은 리스트에서 원하는 부분을 추출하는 것이다.
list[start : end] 의 모습을 가지고 있고,
[:] 인 경우는 처음부터 끝까지, [start :]은 start 인덱스부터 끝까지,
[:end]은 처음부터 end-1 인덱스까지, [start : end] 는 start 부터 end-1까지.
[start : end : step] 은 start부터 end까지 step씩 건너뛰면서
위에서는 [:-1]였기 때문에 처음부터 -2 인덱스까진데
마이너스가 붙은 경우는 맨 마지막 인덱스가 -1이므로 맨 뒤에서 두번째 인덱스까지라는 말이므로 마지막 인덱스인 공백이 없어진 것이다.

2) join
위처럼 answer에 넣어서 하나의 문자열로 만드는 방법도 있지만,
answer += an + " " 대신 answer라는 배열을 생성하고
answer.append(an)으로 배열에 넣고 " ".join(answer)을 리턴하는 방법도 있다.
우선 join 함수의 모양은 '구분자'.join(리스트)이다.
리스트의 요소들 사이에 구분자를 넣어 문자열을 만들어 반환해주는 함수이다.

  • 새로 짠 코드
def solution(s):
    s =  s.split(" ")
    answer = []
    for i in s :
        answer.append("".join([i[j].upper() if j%2 == 0 else i[j].lower() for j in range(len(i)) ]))
    return " ".join(answer)
profile
전 척척학사지만 말하는 감자에요

0개의 댓글