문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
def solution(s):
answer = ""
idx = 0
for ch in s:
if ch == " ":
answer += " "
idx = 0
else:
if idx % 2 == 0:
answer += ch.upper()
else:
answer += ch.lower()
idx += 1
return answer
📌 문제 이해
문자열을 공백을 기준으로 단어별로 나눈 뒤, 각 단어에서 짝수 번째 문자는 대문자, 홀수 번째 문자는 소문자로 변환하는 문제이다.
⚠️ 중요한 점은 문자열 전체의 인덱스가 아니라, 단어마다 인덱스를 다시 0부터 시작해야 한다.
예를 들어
try hello world
변환 과정은
try → TrY
hello → HeLlO
world → WoRlD
최종 결과
TrY HeLlO WoRlD
💡 풀이 과정
1️⃣ 결과를 저장할 변수 생성
먼저 변환된 문자열을 저장할 공간을 만든다.
answer = ""
현재 상태
answer = ""
2️⃣ 단어의 인덱스를 저장할 변수 생성
각 단어마다 몇 번째 문자인지 기억하기 위해 idx를 만든다.
idx = 0
예를 들어
t = 0번째
r = 1번째
y = 2번째
처럼 현재 단어의 위치를 저장하는 역할을 한다.
3️⃣ 문자열을 한 글자씩 순회
for ch in s:
문자열
"try hello"
는 반복문에서 다음과 같이 하나씩 가져온다.
t
↓
r
↓
y
↓
(공백)
↓
h
↓
e
↓
l
↓
l
↓
o
4️⃣ 공백인지 확인
if ch == " ":
공백이라면
answer += " "
공백도 그대로 결과에 추가한다.
그리고 다음 단어는 다시 첫 글자부터 시작해야 하므로
idx = 0
으로 초기화한다.
예시
TrY
↓
공백
↓
TrY
그리고
hello
의
h
는 다시
0번째 문자
가 된다.
5️⃣ 짝수 번째 문자 처리
짝수 인덱스라면
idx % 2 == 0
조건이 참이 된다.
이 경우
answer += ch.upper()
를 수행하여 대문자로 변환한다.
예시
idx = 0
t
↓
T
또는
idx = 2
y
↓
Y
6️⃣ 홀수 번째 문자 처리
홀수 인덱스라면
idx % 2 == 1
이므로
answer += ch.lower()
를 수행하여 소문자로 변환한다.
예시
idx = 1
R
↓
r
7️⃣ 현재 단어의 인덱스 증가
문자를 하나 처리했으면
idx += 1
을 수행하여 다음 문자의 위치를 증가시킨다.
예시
0
↓
1
↓
2
↓
3
🔄 전체 동작 예시
입력
try hello
반복 과정
| t | 0 | T |
| r | 1 | Tr |
| y | 2 | TrY |
| 공백 | - | TrY |
| h | 0 | TrY H |
| e | 1 | TrY He |
| l | 2 | TrY HeL |
| l | 3 | TrY HeLl |
| o | 4 | TrY HeLlO |
최종 결과
TrY HeLlO
✏️ 오늘 배운 점
이번 문제를 통해 문자열을 한 글자씩 순회하며 조건에 따라 문자를 변환하는 방법을 익힐 수 있었다. 특히 문자열 전체의 인덱스를 사용하는 것이 아니라 공백을 기준으로 단어마다 인덱스를 다시 0으로 초기화해야 한다는 점이 핵심이었다.
또한 upper(), lower()를 활용한 문자열 변환과 % 연산자를 이용해 짝수와 홀수를 구분하는 방법도 함께 복습할 수 있었으며, 반복문과 조건문을 조합해 문자열을 원하는 형태로 가공하는 과정을 이해할 수 있었다.