
1. 모음 제거
Q. 영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
func solution(_ my_string:String) -> String {
return my_string.filter { $0 != "a" }.filter { $0 != "e" }.filter { $0 != "i" }.filter { $0 != "o" }.filter { $0 != "u"}
}
A. 전달 받은 my_string을 고차 함수 filter를 5번 활용해 모음을 제거한 문자열을 반환하여 해결했다.
feat.
func solution(_ my_string:String) -> String {
return my_string.filter { !["a", "e", "i", "o", "u"].contains($0)}
}
문제를 해결하면서 나도 contains()를 활용해 filter를 한 번만 사용해서
효율적으로 코드를 작성하고 싶었는데 자꾸 에러가 발생해 사용하지 못했다...
역시나 다른 풀이를 보니 가장 첫 번째로 위와 같은 풀이가 있었는데
나는 $0.contains(["a", "e", "i", "o", "u"]) 로 코드를 작성해서 에러가 났다는 사실을 알게 되었다!
2. 문자열 정렬하기 (1)
Q. 문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
func solution(_ my_string:String) -> [Int] {
return my_string.filter { $0.isNumber }.compactMap { Int(String($0)) }.sorted()
}
A. 먼저 전달 받은 my_string을 고차함수 filter를 활용하여 숫자만 추출한 배열로 만들고
그 배열을 고차함수 compactMap을 활용해 Int 배열로 변환한 후,
sorted()를 활용해 오름차순으로 정렬한 리스트를 반환하여 해결했다.
feat.
func solution(_ my_string:String) -> [Int] {
return my_string.compactMap { Int(String($0)) }.sorted()
}
위 풀이를 보면, 내가 작성한 코드에서 filter를 과감히 빼더라도 같은 결과를 얻을 수 있다.
다시 생각해보니 고차함수 compactMap은 map과 다르게 non-nil인 결과만 포함해서 return 해준다.
그리고 공식 문서에 따르면, Int는 String을 넣었을 때 nil을 반환할 수 있기 때문에
결과적으로 compactMap에서 String을 Int로 캐스팅 할 때 숫자가 아닌 값들을 걸러낼 수 있기 때문이다.

3. 숨어있는 숫자의 덧셈 (1)
Q. 문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
func solution(_ my_string:String) -> Int {
return my_string.filter { $0.isNumber }.compactMap { Int(String($0)) }.reduce(0, +)
}
A.먼저 전달 받은 my_string을 고차함수 filter를 활용하여 숫자만 추출한 배열로 만들고
그 배열을 고차함수 compactMap을 활용해 Int 배열로 변환한 후,
고차함수 reduce를 활용해 배열의 모든 수를 합친 값을 반환하여 해결했다.
feat.
func solution(_ my_string:String) -> Int {
return my_string.compactMap { Int(String($0)) }.reduce(0, +)
}
위 코드도 2번 문제와 같은 맥락에서 filter를 제거하여 효율적으로 코드를 작성할 수 있다!
4. 소인수분해
Q. 소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
func solution(_ n:Int) -> [Int] {
var result: [Int] = []
var value: Int = n
while value != 1 {
for i in 2...n {
if value % i == 0 {
value = value / i
if !result.contains(i) {
result.append(i)
}
break
}
}
}
return result
}
A. 전달 받은 n을 변환하기 위해 변수 value에 저장하고
value를 소인수들로 나누면 1이 되기 때문에,
while문을 통해 value가 1이 될 때까지 반복하는 반복문 내에서
for문을 통해 2부터 n까지 반복하면서 i가 소수일 때,
value를 i로 나눈 값으로 업데이트 하고
소수 i의 중복 여부를 체크한 후 result에 추가하고
더 이상의 반복을 피하기 위해서 for문을 탈출한다.
그리고 while문이 끝날 때까지 위 과정을 반복한 후, result를 반환하여 해결했다.
어제 글을 다 쓰고 임시저장한 상태로 12:07에 글을 올리게 되어
오블완 챌린지를 21일차까지 달성할 수 없게 되었다..(해야 할 일을 까먹고 미루지 말자)
12일차까지 꾸준히 써왔기에 아쉬운 마음이 들 수 밖에 없지만
이미 지난 일이고 어쩔 수 없기에 아쉬움은 뒤로 한채로
입문 문제는 끝까지 풀어 볼 예정이다!
내일도 화이팅!
'Develop > Coding Test' 카테고리의 다른 글
코딩테스트 입문 (feat. Day 14 문자열, 배열, 사칙연산, 수학, 조건문) (1) | 2024.11.24 |
---|---|
코딩테스트 입문 (feat. Day 13 문자열, 배열, 사칙연산, 수학, 조건문) (3) | 2024.11.22 |
코딩테스트 입문 (feat. Day 11 수학, 반복문) (2) | 2024.11.19 |
코딩테스트 입문 (feat. Day 10 수학, 문자열, 해시, 완전탐색, 조건문) (2) | 2024.11.17 |
코딩테스트 입문 (feat. Day 9 수학, 문자열, 해시, 완전탐색, 조건문) (2) | 2024.11.16 |