✅1. 9로 나눈 나머지
https://school.programmers.co.kr/learn/courses/30/lessons/181914
🎃 나의 풀이
func solution(_ number:String) -> Int {
var result = 0
result = number.reduce(0) {$0 + Int(String($1))! }
return result % 9
}
reduce사용해서 간단하게 해결하기! 문자열의 요소를 int로 변환하여 모두 더해준 뒤 9로 나누기
✅2. 문자열 여러 번 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/181913
🎃 나의 풀이
func solution(_ my_string:String, _ queries:[[Int]]) -> String {
var arr = my_string.map {String($0)}
queries.forEach { query in
var reverseArr = Array(arr[query[0]...query[1]].reversed())
arr.replaceSubrange(query[0]...query[1], with: reverseArr)
}
return arr.joined()
}
forEach, reversed, replaceSubrange를 조합하여 풀었다.
reversed와 reverse의 차이점을 몰랐는데 확인을 해보니
reversed : 원본을 변경하지 않고 반전된 컬렉션을 반환함
reverse : 원본을 변경하고 컬렉션을 반환하지 않음
🏆 모범 풀이
func solution(_ my_string:String, _ queries:[[Int]]) -> String {
var myString = my_string.map { String($0) }
queries.forEach { q in
myString[q[0]...q[1]].reverse()
}
return myString.joined()
}
reverse만 사용하여 더욱 간결하게 풀 수 있는 문제였다.
✅3. 배열 만들기 5
https://school.programmers.co.kr/learn/courses/30/lessons/181912
🎃 나의 풀이
func solution(_ intStrs:[String], _ k:Int, _ s:Int, _ l:Int) -> [Int] {
var result : [Int] = []
intStrs.forEach { intStr in
var arr = intStr.map{ String($0)}
let value = Int(arr[s..<s+l].joined())!
if( value > k){
result.append(value)
}
}
return result
}
문자열을 문자열 배열로 [String] 변환하여 풀었다.
🏆 모범 풀이
func solution(_ intStrs:[String], _ k:Int, _ s:Int, _ l:Int) -> [Int] {
return intStrs.map {
let startIdx = $0.index($0.startIndex, offsetBy: s)
let endIdx = $0.index(startIdx, offsetBy: l)
return Int(String($0[startIdx..<endIdx]))!
}.filter { $0 > k }
}
String.index를 구해서 index를 활용한 이 방법이 정석인 거 같다!
✅ 4. 부분 문자열 이어 붙여 문자열 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181911
🎃 나의 풀이
func solution(_ my_strings:[String], _ parts:[[Int]]) -> String {
return zip(my_strings, parts).reduce("") { result, tuple in
let (str, part) = tuple
var arr = str.map {String($0)}
return result + arr[part[0]...part[1]].joined()
}
}
비슷한 문제를 이전에는 for문을 이용하여 풀었기 때문에 이번에는 zip과 reduce를 사용하여 풀어보았다.
이제는 원하는 값이 단일 변수면 reduce, 배열이면 map을 자동적으로 떠올리는 수준이 되었다.
✅ 5. 문자열의 뒤에 n글자
https://school.programmers.co.kr/learn/courses/30/lessons/181910
🎃 나의 풀이
func solution(_ my_string:String, _ n:Int) -> String {
let startIndex = my_string.index(my_string.endIndex, offsetBy: -n)
return String(my_string[startIndex..<my_string.endIndex])
}
index 함수를 사용하여 마지막 인덱스에서 -n까지 떨어진 범위에 char를 가져와 String으로 변환하여 반환해 주었다.
여기서 주의할 점은 endIndex를 사용할 때인데,
이유를 알 수 없지만, endIndex는 문자열의 마지막 index + 1 값을 받아온다.
✅ 6. 접미사 배열
https://school.programmers.co.kr/learn/courses/30/lessons/181909
🎃 나의 풀이
func solution(_ my_string:String) -> [String] {
var arr : [String] = []
for i in 1...my_string.count{
let startIndex = my_string.index(my_string.endIndex, offsetBy: -i)
arr.append(String(my_string[startIndex..<my_string.endIndex]))
}
arr.sort()
return arr
}
for문과 index 함수를 사용하여 맨 끝에서 -i만큼 떨어짐 단어들을 배열로 담아 해결하였다.
🏆 모범 풀이
func solution(_ myString: String) -> [String] { myString.indices.map { String(myString[$0...]) }.sorted() }
생각보다 더 쉬운 문제였는데 indices를 통해 배열의 모든 유효한 인덱스를 가져와서 i...(마지막) 범위의 값을 가져오면 더욱 깔끔하게 해결이 되는 문제였다..!
✅ 7. 접미사인지 확인하기
https://school.programmers.co.kr/learn/courses/30/lessons/181908
🎃 나의 풀이
func solution(_ my_string:String, _ is_suffix:String) -> Int {
var suffixArr : [String] = []
suffixArr = my_string.indices.map{String(my_string[$0...])}
return suffixArr.contains(is_suffix) ? 1 : 0
}
indices와 map을 사용하여 모든 접미사를 배열로 담은 다음 contains를 사용하여 요소가 존재하는지 판단하여 풀어냈다.
하지만 모범 풀이를 보니 모든 접미사를 굳이 구할 필요가 없었다.
🏆 모범 풀이
func solution(_ myString: String, _ isSuffix: String) -> Int { myString.hasSuffix(isSuffix) ? 1 : 0 }
hasSuffix라는 문자열에 접미사가 존재하는지 판단해 주는 함수가 이미 있었다. ㅎ
func solution(_ my_string:String, _ is_suffix:String) -> Int {
return my_string.suffix(is_suffix.count) == is_suffix ? 1 : 0
}
또한, 모든 접미사를 알아내지 않더라도
주어진 문자열의 카운트를 suffix함수에 인자로 넣었을 때도 접미사인지 판단할 수 있었다.
✅ 8. 문자열의 앞의 n 글자
https://school.programmers.co.kr/learn/courses/30/lessons/181907
🎃 나의 풀이
func solution(_ my_string:String, _ n:Int) -> String {
let index = my_string.index(my_string.startIndex, offsetBy: n)
return my_string.substring(to: index)
}
index함수를 사용하여 n에 해당하는 String.Index 값을 구하고 substring으로 범위 내의 문자열을 받아와서 해결해였다.
🏆 모범 풀이
func solution(_ my_string:String, _ n:Int) -> String {
return String(my_string.prefix(n))
}
모범 풀이를 보니 prefix라는 시작지점부터 n인덱스까지 문자열을 가져오는 함수가 있었다.ㅋㅋ
(prefix라는 단어 자체가 접두사라는 뜻)
✅ 9. 접두사인지 확인하기
https://school.programmers.co.kr/learn/courses/30/lessons/181906
🎃 나의 풀이
func solution(_ my_string:String, _ is_prefix:String) -> Int {
return my_string.hasPrefix(is_prefix) ? 1 : 0
}
접두사인지 확인하는 함수인 prefix를 사용하여 해결!
✅ 10. 문자열 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/181905
🎃 나의 풀이
func solution(_ my_string:String, _ s:Int, _ e:Int) -> String {
var str = my_string
let startIndex = my_string.index(my_string.startIndex, offsetBy: s)
let endIndex = my_string.index(my_string.startIndex, offsetBy: e)
str.replaceSubrange(startIndex...endIndex, with: my_string[startIndex...endIndex].reversed())
return str
}
reversed 함수와 replaceSubrange함수를 사용하여 비교적 쉽게 풀 수 있었다.
'백준, 프로그래머스' 카테고리의 다른 글
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 3회차 (0) | 2024.05.23 |
---|---|
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 2회차 (0) | 2024.05.22 |
[프로그래머스] swift 코딩 기초 트레이닝(0레벨) 1회차 (0) | 2024.05.20 |
[프로그래머스] 대충 만든 자판 C# (0) | 2024.05.16 |
[프로그래머스] 바탕화면 정리 C# 풀이 (0) | 2024.05.13 |