[프로그래머스][LV.1] 이상한 문자 만들기 | python3

2025. 2. 18. 09:09프로그래머스/LV.1

 
문제 링크: 이상한 문자 만들기
 

문제 설명

문제 설명

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

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

 


문제 풀이

리스트 마지막 단어를 끝내고 공백이 추가되지 않도록 주의해야한다.

split()과 split(' ')의 차이

s = "try@hello@world@@guraya@@@@gura" 라고 가정합니다. ( @ 은 공백을 의미합니다.)

s.split() 결과
['try', 'hello', 'world', 'guraya', 'gura']

s.split(' ')
['try', 'hello', 'world', '', 'guraya', '', '', '', 'gura']

이렇게 공백까지도 같이 포함시키는 것을 알 수 있음.문제는 첫 번째 방법으로 하면 문제를 풀면
'TrY@HeLlO@WoRlD@GuRaYa@GuRa'
이렇게 나옵니다.
저도 계속 처음에 아니 뭐가 문제인거지 했는데 처음에 input으로 넣었던 문장과 달라지는게 문제였습니다.
"try@hello@world@@guraya@@@@gura"
이것이
'TrY@HeLlO@WoRlD@@GuRaYa@@@@GuRa'
이렇게 되기를 문제는 기대하는데 저는 split() 을 써서 연속되는 공백을 하나로 처리해버려서
'TrY@HeLlO@WoRlD@GuRaYa@GuRa'
이렇게 나오는 것이죠.그래서 처음에 예시 문제는 맞췄으나 테스트 코드에서 계속 실패하는 일이 발생했습니다.코드는
def solution(s):
	answer = ''
    t = s.split(' ') 
    # t = s.split()​

이것과 비교해보시면 좋을 것 같아요.
for i in t:
	for j in range(len(i)):
    	if j&1==0: # 짝홀 구분의 경우~~
        	answer += i[j].upper()
        else:
        	answer += i[j].lower()
    answer += ' '
return answer[:-1]​

짝홀 구분 같은 경우에 코딩 공부하면서 %2 ==0 과 같은 방법 안쓰게 되고 좀 더 편한 비트 연산자만 사용하게 되었습니다.해당 내용은 구글링하시면 개념하고 알 수 있어서 되게 간단한거라 유용할 것 같아요.

def solution(s): 
	answer = '' 
    t = s.split(' ') 
    for i in t: 
    	for j in range(len(i)):
            if j&1==0: 
            	answer += i[j].upper() 
            else: 
            	answer += i[j].lower() 
        answer += ' ' 
    return answer[:-1]​


 

내코드

def solution(s):
    answer = ''
    s_list=s.split()
    for sl in s_list:
        for idx in range(len(sl)):
            if idx%2:
                answer+=sl[idx].lower()
            else:
                answer+=sl[idx].upper()
        if sl!=s_list[-1]:
            answer+=' '
    return answer

 
 


더보기

다른사람풀이

def toWeirdCase(s):
    return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))

1. 기본 문법

 
map(변환함수, iterable)
 

변환함수 → map()이 적용할 함수 (lambda나 def로 만든 함수)
iterable → 리스트, 튜플 등 반복 가능한 자료형

🚀 결과값은 map 객체(이터레이터)로 반환되므로, list() 또는 tuple()로 변환해서 사용해야 함.


2. map() 사용 예제

(1) 리스트의 모든 숫자를 제곱하기

nums = [1, 2, 3, 4, 5] 
squared = list(map(lambda x: x ** 2, nums)) 
print(squared) 

# [1, 4, 9, 16, 25]
  • lambda x: x ** 2 함수가 리스트 nums의 각 요소에 적용됨.
  • 최종적으로 모든 숫자가 제곱된 리스트가 반환됨.