문제출처 👇
programmers.co.kr/learn/courses/30/lessons/12930
문제설명 👀
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s | return |
"try hello world" | "TrY HeLlO WoRlD" |
입출력 예 설명
"try hello world"는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
문제풀이
-> 입력받은 문자를 하나씩 검사하여 문제의 요구대로 공백, 짝수번째 글자, 홀수번째 글자 나누어 처리하면 된다.
여기서 주의할 점은 제한사항에 나와있듯이 "문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단" 해야 한다는 부분이다. 공백을 기준으로 문자열의 index를 판단하도록 하면 된다.
나는 count라는 변수를 이용하여 문자의 index를 세어주었는데 공백인 경우 이 count에 들어있는 값을 reset 해주기 위해 -1이라는 값을 넣어주었다. 반복문이 돌 때마다 매번 count는 +1이 되므로 공백 후 첫 글자의 index는 0이 된다.
func solution(_ s:String) -> String { | |
var count = 0 | |
var result = "" | |
for letter in s { | |
if letter == " " { | |
count = -1 | |
result += String(letter) | |
} else if count % 2 == 0 { | |
result += letter.uppercased() | |
} else { | |
result += letter.lowercased() | |
} | |
count += 1 | |
} | |
return result | |
} | |
// 이상한 문자 만들기 |
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 실패율 (레벨1, swift) (0) | 2020.06.28 |
---|---|
프로그래머스 - 직사각형 별찍기 (레벨1, swift) (0) | 2020.06.28 |
프로그래머스 - x만큼 간격이 있는 n개의 숫자 (레벨1, swift) (0) | 2020.06.27 |
프로그래머스 - 최대공약수와 최소공배수 (레벨1, swift) (0) | 2020.06.26 |
프로그래머스 - 콜라츠 추측 (레벨1, swift) (0) | 2020.06.26 |