알고리즘 | 배열 두배 만들기

일어나 개발해야지·2023년 8월 7일

알고리즘

목록 보기
3/12

문제설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • -10,000 ≤ numbers의 원소 ≤ 10,000
  • 1 ≤ numbers의 길이 ≤ 1,000

입출력 예

numbersresult
[1, 2, 3, 4, 5][2, 4, 6, 8, 10]
[1, 2, 100, -99, 1, 2, 3][2, 4, 200, -198, 2, 4, 6]

접근

keyword
정수로 된 배열을 파라미터로 받고 , 배열의 각 요소에 2를 곱한 값을 반환하는 함수

  • 접근 1 - 실패
//매개변수로 정수의 배열을 받는다.
func solution(_ numbers:[Int]) -> [Int] {
    var resultArray: [Int] = []
    
    for number in array {
        let multipliedValue = number * 2
        resultArray.append(multipliedValue)
    }
    
    return resultArray
}
}
  • 접근 2 - 실패(시간초과)
import Foundation

func solution(_ numbers:[Int]) -> [Int] {
    var resultArray: [Int] = []
    
    for i in 0..<numbers.count {
        let multipliedValue = numbers[i] * 2
        resultArray.append(multipliedValue)
    }
    
    return resultArray
}

답안제출

func solution(_ numbers: [Int]) -> [Int] {
    return numbers.map({ $0 * 2 })
}

참고

//Q1: $0  
//A1: 매개변수의 첫번째 인자값(클로저 표현식)

	return numbers.map({ $0 * 2 }) 

//Q2: $0 가 첫번째 인자값을 뜻하는 표현식이라면 
//		계속 첫번째 인자값에 *2를 해주는것처럼 생각이 되는데,
//		어떻게 배열이 나오는걸까 ?
//A2: map 함수에서 $0의 사용은 요소를 반복하는 동안 현재 요소를 가리킴
//    따라서 답안에서의 함수는 배열의 모든 요소에 연산이 적용됨

//Q3: 그렇다면 $1으로 작성하면 ? 그래도 배열의 각 요소를 반복하면서 연산적용이 가능할까 ?
//A3: 불가능. $1로 표기했다는건 두개의 매개변수가 있다고 가정하는거라 컴파일 오류가 발생함.
//	  map과 $0은 배열함수를 다룰때 각각의 요소에 접근하는 관례적인 표현. 

0개의 댓글