Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

MyPrograming

프로그래머스-파이썬 (이상한 문자 만들기) 본문

Python/알고리즘

프로그래머스-파이썬 (이상한 문자 만들기)

SeongWon 2021. 1. 25. 16:58
반응형

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

 

가만히 고민해보니 가장 먼저 체크해야 할 것이 해당 인덱스의 문자열이 공백인지 아닌지를 우선 체크한 후, 

그 인덱스의 짝수, 홀수를 체크해야 알맞은 알고리즘이 되는 것이었다. 입출력 예시만 보고 판단한 것이 화근이였다...

문제 전체를 차근차근 읽어보고 완벽하게 이해하는 연습을 우선으로 해야겠다.

반응형