본문 바로가기
Programmers/Python

[Python] 프로그래머스 :: 이상한 문자 만들기

by Sin_ 2021. 9. 24.
728x90

안녕하세요 뚜디 입니다:)

코딩테스트 연습 - 이상한 문자 만들기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 이상한 문자 만들기

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

programmers.co.kr


1. 연습 문제

2. 문제 풀이

3. 소스 코드

4. 결과


1. 연습 문제
  • 문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
  • 제한 조건
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
  • 입출력 예
s return
"try hello world" "TrY HeLlO WoRlD"
2. 문제 풀이
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

임의의 문자열을 split() 함수를 통해 리스트로 변환하여 진행하면 큰 어려움은 없습니다.
다만 split() 함수를 사용할때 공백 관련하여 유의 해야할 점이 있습니다 아래에서 설명하도록 하겠습니다.
3. 소스 코드
  • 잘못된 동작하는 소스 코드 예
def solution(s):
    answer = []
    temp = ''
    s = s.split()

    for i in range(len(s)):
        for j in range(len(s[i])):
            if(j % 2):
                temp += s[i][j].lower()
            else:
                temp += s[i][j].upper()
        answer.append(temp)
        temp = ''
    return (" ").join(answer)
s = s.split() 을 통해 "try hello world"를 리스트로 변환하게되면
["try", "hello", "world"] 로 만들어 지게되는데 입출력 예제에서는 문제가 없지만
해당소스를 제출하게되면 아래와같이 실패를 하게됩니다. 그 이유는
"try      hello world" 기본 예제에서 이렇게 여러개의 공백을 추가했을 경우 문제가 발생하게되는데
s = s.split() 을 진행하게 되면 ["try", "hello", "world"] 아까와 같은 리스트가 만들어지는
오류가 발생하게됩니다. 따라서 s = s.split(" ")으로 정확히 공백 하나에 대해서 명시를 해줘야 합니다.

  • 정상 동작하는 소스 코드 예
def solution(s):
    answer = []
    temp = ''
    s = s.split(" ")

    for i in range(len(s)):
        for j in range(len(s[i])):
            if(j % 2):
                temp += s[i][j].lower()
            else:
                temp += s[i][j].upper()
        answer.append(temp)
        temp = ''
    return (" ").join(answer)
4. 결과

728x90