프로그래머스 LV.1 모음
이상한 문자 만들기
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준) 별로 짝/홀수 인덱스를 판단해야 합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s | return |
"try hello world" | "TrY HeLlO WoRlD" |
입출력 예 설명
입출력 예
- "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD"를 리턴합니다.
제출
func solution(_ s:String) -> String {
var re = ""
var count = 0
for i in Array(s){
if i == " "{
re += " "
count = 0
}
else if count%2 == 1{
re += i.lowercased()
count += 1
}
else{
re += i.uppercased()
count += 1
}
}
return re
}
결과 값을 저장할 String 변수 re와 단어의 알파벳의 개수를 구할 Int 변수 count를 선언한다.
입력받은 문자열을 배열로 변환한 후, 배열의 요소가 공백이라면 한 단어가 끝난 것이기 때문에 re에 공백을 더한 후 count를 0으로 초기화한다.
단어의 개수가 홀수라면 re변수에 소문자를 더하고, 짝수라면 대문자를 더한다. 그리고 count 변수를 1씩 증가시킨다.
다른 풀이
import Foundation
func solution(_ s:String) -> String {
let a = s.components(separatedBy: " ").map { $0.enumerated().map { $0.offset % 2 == 0 ? $0.element.uppercased() : $0.element.lowercased() } }
return a.map{ $0.map { $0 }.joined() }.joined(separator: " ")
}
입력받은 문자열을 공백기준으로 나눈 후, 각 단어에 enumerated()를 사용하여 배열의 인덱스와 요소를 가져온다.
map을 사용해 단어의 인덱스가 짝수라면 대문자를, 홀수라면 소문자를 반환하여 a에 저장한다.
ex) 입력이 입출력 예시와 같을 때, a = [["T", "r", "Y"], ["H", "e", "L", "l", "O"], ["W", "o", "R", "l", "D"]]
map과 joined를 사용해서 알파벳을 조합해 단어를 만들고, 단어들을 공백을 넣어 조합해 문자열을 만들어 반환한다.
반응형
'📖 Coding Test > Programmers LV.1' 카테고리의 다른 글
[프로그래머스 LV.1] 자연수 뒤집어 배열로 만들기 (0) | 2023.02.10 |
---|---|
[프로그래머스 LV.1] 자릿수 더하기 (0) | 2023.02.10 |
[프로그래머스 LV.1] 약수의 합 (0) | 2023.02.09 |
[프로그래머스 LV.1] 시저 암호 (0) | 2023.02.08 |
[프로그래머스 LV.1] 문자열을 정수로 바꾸기 (0) | 2023.02.08 |
댓글