코딩테스트 입문
Day 4 - 2023.01.04
정수 배열 numbers
가 매개변수로 주어집니다. numbers
의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성하라.
numbers
의 원소가 -10,000보다 크거나 같고 10,000보다 작거나 같아야한다.numbers
의 길이가 1보다 크거나 같고 1,000보다 작거나 같아야 한다.for.swift
func solution(_ numbers: [Int]) -> [Int] {
// 제한 사항
guard 1...1000 ~= numbers.count else {
return []
}
// 문제 풀이
var answer: [Int] = []
for num in numbers {
answer.append(num*2)
}
return answer
}
map.swift
func solution(_ numbers: [Int]) -> [Int] {
// 제한 사항
guard 1...1000 ~= numbers.count else {
return []
}
// 문제 풀이
var answer: [Int] = []
answer = numbers.map({ $0 * 2 })
return answer
}
먼저 제한 사항은 guard문을 이용하여 설정하였고 2가지 방식으로 문제를 해결했다.
For-in으로 문제를 해결한 방식은 solution함수에 들어온 numbers의 array들을 For in으로 하나씩 꺼내서 곱하기 2를 한 후 answer에 넣었다.
보다 편한 방식의 고차함수 map을 이용하는 방법으로도 해결해보았다.
numbers의 array에 map메소드를 이용하여 (요소 * 2)를 하여 answer에 넘겨주게 했다.
먼저 고차함수를 설명하자면,
고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수를 말한다.
Swift 라이브러리에서는 고차함수인 map, filter, reduece 등을 지원하기 때문에 쓸 수 있다.
map은 데이터를 변형하고자 할 때 사용된다.
기존 데이터를 변경하여 새로운 컨테이너를 만드는데 용이하다. (For-in 구문과 큰 차이는 없음)
For-in 대신에 map을 이용하면 코드의 간결성, 재사용 용이, 컴파일러 최적화에 좋다.