티스토리 뷰
프로그래머스 레벨1, 이상한문자 만들기 문제 링크 ▼
프로그래머스 이상한문자 만들기 문제설명
프로그래머스의 1단계 기초문제, 이상한문자 만들기는 주어진 문자열을 특정 조건에 따라 변형한 후 반환하는 문제입니다. 입출력 예시는 아래와 같습니다.
try hello world -> TrY HeLlO WoRlD |
위와 같이 주어진 문자열을 공백 단위로 보는데, 각 단어의 짝수번째는 대문자로, 홀수번째는 소문자로 변형해서 반환해야 합니다.
자세한 내용은 본 문제 링크를 통해서 확인하시기 바랍니다. 바로 swift언어로 문제 풀어보겠습니다.
프로그래머스 이상한문자 만들기 swift 문제풀이
String extension 활용
이번 문제 대부분의 코드는 String extension에서 작성해보겠습니다.
3행) String타입에서 접근 가능한 멤버변수, answer는 본 문제에서 요구하는 문자열을 반환할 예정입니다.
4행) isUpperCasePos는 현재 순회하는 문자가 대문자여야 하는지, 소문자여야 하는지를 체크하는데 사용합니다.
5행) reduce는 초기값을 지정하고, 배열(여기서는 String)의 요소를 하나하나 순회, 특정 연산을 통해 누적된 값을 반환하고자 할때 사용할 수 있습니다. "" 문자열에서 시작해서 현재 문자열을 주어진 규칙에 따라 변형할 예정입니다. 클로져 블록 첫줄에 정의된 string / char는 각각 누적된 값이 저장될 문자열 / 현재 문자열에서 순회중인 문자입니다.
6 ~ 10행) 공백이 있을 경우에는 문자열 누적중인 string 변수에 공백 한칸을 추가 + 다음 단어 체크를 위해 isUppserCasePos를 초기화 시켜주고 넘어갑니다.
12 ~ 18행) 12행에서 현재 순회중인 문자의 ascii 코드 값을 추출하고, 있는데 잘못 들어간 코드입니다. 😂 아스키코드 값을 구
할때 사용할 수 있는 코드인데 넘어가주세요 ㅎㅎ 본 문제를 푸는데 필요없는 코드입니다. 이어서 isUpperCaedPos의 true/false 여부에 따라 대문자/소문자로 변형시켜줍니다. 대/소문자 변형은 String타입의 uppercased(), lowercased()를 통해 쉽게 적용할 수 있습니다. 이후 각 단어의 대문자 다음은 소문자 / 소문자 다음은 대문자가 와야 하므로 isUpperCasePos를 토글 시켜줍니다.
Bool타입의 멤버 메서드, toggle() 함수는 Bool 값을 토글 시켜주는 역할을 합니다. toggle() 사용 없이 조건문이나 삼항연산자를 통해 토글시켜도 무방합니다.
위 solution 메서드에서 해야할 것은 딱 하나입니다.
String타입 인자, s를 통해 위 String extension에서 구현한 anwer 변수를 반환시키면 끝입니다.
본 문제, 이상한문자 만들기 제출결과 & 작성한 swift 전체코드는 아래와 같습니다.
extension String {
var answer: String {
var isUpperCasePos: Bool = true
return self.reduce(into: "") { (string, char) in
if char == " " {
string += " "
isUpperCasePos = true
return
}
let ascii = Int(char.asciiValue!)
if isUpperCasePos {
string += "\(char)".uppercased()
} else {
string += "\(char)".lowercased()
}
isUpperCasePos.toggle()
}
}
}
func solution(_ s:String) -> String {
return s.answer
}
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
스위프트 기초정렬문제, 2693 N번째 큰 수 문제풀이 (0) | 2021.02.24 |
---|---|
스위프트 다중 for 반복문 문법 예제, 백준 2798 블랙잭 풀이 (0) | 2021.02.22 |
swift 코딩테스트 기초, 최솟값만들기 계수정렬 풀이 (1) | 2021.02.18 |
swift filter, min 함수 예제, 제일작은수 제거하기 풀이 (0) | 2021.02.17 |
스위프트 reduce 기초예제, 프로그래머스 평균구하기 풀이 (0) | 2021.02.16 |
- Total
- Today
- Yesterday
- Swift 알고리즘
- 백준알고리즘
- Collection
- 스위프트
- 부스트코스
- SwiftUI
- 알고리즘
- 백준swift
- swift string
- swift문제
- 프로그래머스swift
- publisher
- swift
- 컬렉션
- swift 문자열
- swift reduce
- 자연어처리
- ios
- swift 기초
- Protocol
- 프로그래머스
- swift언어
- 개발자문서
- uikit
- 알고리즘문제
- createML
- swift알고리즘
- 김프매매
- CoreML
- 프로토콜
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |