본문 바로가기
Algorithm/Programmers

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

by 홍월이_ 2022. 12. 28.

시작하며...

모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.

마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.

 

[Level 1] 이상한 문자 만들기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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

제한 사항

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

입출력 예

입출력 예 설명

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

 

My Solution

def solution(s):
    answer = []
    list = s.split(' ')
    for i in list:
        tmp = ''
        for j in range(len(i)):
            if j % 2 == 0:
                tmp += i[j].upper()
            else:
                tmp += i[j].lower()
        answer.append(tmp)
    return ' '.join(answer)

주어진 문자열의 각 단어들을 대소문자로 변환하는 문제이다. 각 단어마다의 인덱스를 구분해야 했기때문에 문자열을 나눠서 판단하고 변환하였다.

  • 주어진 문자열 s를 공백을 기준으로 나누기 - s.split(' ')
  • 나누어진 문자열을 첫번째 단어부터 반복문을 이용하여 변환
  • 단어들의 글자를 변환하여 저장할 임시 변수 tmp 생성
  • 각 단어들의 첫번째 글자부터 반복문을 돌면서 인덱스( j ) 가 짝수인지, 홀수인지 판단하여 대소문자 변환
    • 인덱스가 짝수면 대문자, 홀수면 소문자로 변환하여 tmp 변수에 더하기
  • 변환된 문자 tmp를 answer 리스트에 append 하여 추가해주었다.
  • 리스트 형태의 answer를 공백으로 join하여 결과값 리턴

 

More Solution

def solution(s):
    idx = 0
    s_ = [c for c in s]
    for i, c in enumerate(s):
        if c == ' ':
            idx = 0
            continue
        s_[i] = c.upper() if idx % 2 == 0 else c.lower()
        idx += 1
    return "".join(s_)

가져온 다른 풀이! 문자열을 split 하여 나누지 않고 idx 라는 변수를 활용하여 문제를 풀이했다

  • 주어진 문자열을 단어가 아닌 글자마다의 리스트로 변환
  • 문자 리스트 전체 반복문을 돌면서 문자를 변환하였다.
  • 반복문을 돌다가 검색된 글자가 공백이라면 idx를 0으로 초기화 하고 문자 변환 없이 continue
  • idx 가 짝수라면 i번째 문자를 대문자로 바꿔주고 아니라면 소문자로 변환하면서 idx를 1씩 올려준다.
  • 변환된 문자열 리스트 s_ 를 문자열로 join 하고 리턴

 

댓글