[프로그래머스][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의 각 요소에 적용됨.
- 최종적으로 모든 숫자가 제곱된 리스트가 반환됨.
'프로그래머스 > LV.1' 카테고리의 다른 글
[프로그래머스][LV.1] [PCCE 기출문제] 9번 / 이웃한 칸 | python3 (0) | 2025.03.02 |
---|---|
[프로그래머스][LV.1] 기사단원의 무기 | python3 (0) | 2025.02.18 |
[프로그래머스][LV.1] 바탕화면 정리 | python3 (0) | 2025.02.01 |
[프로그래머스][LV.1] 과일 장수 | python3 (0) | 2025.01.24 |
[프로그래머스][LV.1] 모의고사 | python3 (0) | 2025.01.24 |