https://school.programmers.co.kr/learn/courses/30/lessons/120824
짝수와 홀수의 개수를 구하라니 문제만 봐도 굉장히 쉬워보였다!
짝수는 2로 나눴을 때 나머지가 0인 수, 홀수는 2로 나눴을 때 나머지가 1인 수를 각각 구하면 되는것이다
import Foundation
func solution(_ num_list:[Int]) -> [Int] {
var num1 = 0
var num2 = 0
for i in num_list {
if i%2 == 0 {
num1 += 1
} else {
num2 += 1
}
}
return [num1, num2]
}
짝수와 홀수의 개수를 카운트 할 num1, num2 변수를 선언해주고 전달받은 수의 배열인 num_list 의 요소를 for 반복문을 통해 짝수와 홀수를 구분하고자 했다
물론 이 코드도 맞지만 다른 사람들의 코드를 보니.. 너무 생각없이 코드를 짰나 싶기도 해서 다른 방법으로 풀어보았다
import Foundation
func solution(_ num_list:[Int]) -> [Int] {
return [num_list.filter{ $0 % 2 == 0 }.count, num_list.filter{ $0 % 2 == 1 }.count]
}
코드의 양으로만 봐도 단번에 줄일 수 있는 것을 볼 수 있다!
단어의 뜻 풀이만 봐도 뭔가 해당 배열의 요소를 어떤 조건에 따라 걸러낸다 라는 느낌을 받을 수 있지만 filter
라는 고차함수를 알지 못하는 사람들에게는 구현할 수 없다고 생각한다
문제를 생각하다보니 갑자기 드는 궁금점이 생겼다...
- 고차함수를 써서 코드의 양을 줄일 수 있는게 좋은 방향인가?
- 누구나 알 수 있게 구현하는 것이 좋은 코드인가?
아직 정확하게 정의를 내릴 수 없지만 코테에서는 1번 방법이 더욱 효율적이라 생각하는 편이기는 한거 같다..
앞으로 더 고민해봐야할 부분이다...