Programmers - 이상한 문자 만들기(Python)

문제

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

제한사항

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

입출력 예

제목1제목2
"try hello world""TrY HeLlO WoRlD"

입출력 예 설명

  • "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

✍ 코드

def solution(s):
    '''
    # (1)
    '''
    s = s.split(" ")
    print(s)

    # (2)
    check_bit = 0

    for word in s:
        """
        #(3)
        """
        split_word = list(word)


        for i in range(0, len(split_word)):
            if split_word[i] == " ":
                continue

            # (4)
            if i % 2 == 0 :            
                split_word[i] = word[i].upper()

            # (5)
            else:
                split_word[i] = word[i].lower()


        word = "".join(split_word)

        s[check_bit] = word
        check_bit += 1

    # (6)
    s = " ".join(s)

    return s

s = "try   hello          world"
print(solution(s)) 
  • (1) : 문자열 s를 공백으로 구분하여 리스트 type 형식으로 변환하기
    • 주의할 점은 s = s.split()이 아닌 s = s.split(" ")로 해야 한다는 점이다.
      그 이유는 다음과 같다.
    • 문제 입출력 예에서 s는 "try hello world"이다. 이 때에는 s = s.split()로 해도 원하는 값 자체는 얻을 수 있다.
    • 그러나 만약 s가 s = "try hello world"와 같이 space(띄어쓰기)가 하나로 단어가 구분된 것이 아니라 여러개의 space로 띄어져 있다면 문제가 발생한다.
    • 만약, 위 s에서 s = s.split()을 한다면, 해당 solution 함수의 리턴은 "TrY HeLlO WoRlD"이지만,
      s = s.split(" ")을 한다면 해당 solution 함수의 리턴은 "TrY HeLlO WoRlD"이다.
    • 즉, 각 단어 사이에 space가 얼마나 있느냐에 따라 그 개수에 맞게 결과 값에도 단어 사이에 동일한 space가 있어야 한다는 점이다. 이 점을 명심해야 한다.
  • (2) : 리스트 s의 인덱스를 지정하기 위한 check_bit
  • (3) : ord는 문자열이므로 각 word마다 리스트로 접근하여 슬라이싱을 해주고 이를 split_word에 대입한다. 예를 들어 word가 "hello"일 경우 list(word)를 split_word에 대입하면 split_word = ['h', 'e', 'l', 'l', 'o']가 된다.
  • (4) : i를 2로 나눈 나머지가 0이면 대문자로 치환
  • (5) : i를 2로 나눈 나머지가 1이면 소문자로 치환
  • (6) : 리스트 형태의 s를 문자열 형태로 변환

📝 결과

😃 느낀점

  • 처음 풀었을 때 s = s.split() 때문에 테스트에서 통과를 하지 못했다. 다른 코드는 다 맞는데, 이 하나 때문에 통과하지 못했다. 이 덕분에 split()과 split("")의 차이점을 알게 되었다. 오늘 하루도 코딩을 하면서 하나를 배웠다는 점에 기분이 좋았다.

👍 Irish의 모든 코드 보기

-> Irish Github

좋은 웹페이지 즐겨찾기