티스토리 뷰
이 문제에 가장 먼저 떠오른 것은 Count함수였다.
Count에서 조건을 확인하면 바로 답이 나온다 생각해서 처음에는 다음과 같이 작성할까 생각했다.
using System;
using System.Linq;
public class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[2] {num_list.Count(x => x % 2 == 0), num_list.Count(x => x % 2 == 1)};
return answer;
}
}
그러다 어차피 짝수나 홀수 아무것이나 하나만 구하면 다른 수의 개수는 자동으로 결정되는 것이니 Count함수를 통해 반복문을 두번 수행하는 것 보다 구한 값에서 전체 개수를 빼는 방법으로 바꾸었다.
using System;
using System.Linq;
public class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[2] {num_list.Count(x => x % 2 == 0), 0};
answer[1] = num_list.Length - answer[0];
return answer;
}
}
코드가 한줄 늘어나긴 했지만 시간적으로나 공간적으로나 훨씬 유리할 것이라 생각했다.
그래도 생각했던 것 이상의 시간이 나오기는 했다.
여기서 궁금증이 발생하여 원래 진행하려던 방식으로도 다시 진행해보았다.
결과는 엄청나게 크게 차이나는 것은 아니었지만 내가 선택한 방식이 확실히 시간적 우위를 가지는 것을 확인했다.
여기서 궁금한 점
가장 많은 분들이 생각했을 조건문을 통한 결과는 어떨까?
using System;
public class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[2];
for(int i = 0; i < num_list.Length; i++)
{
if(num_list[i] % 2 == 0)
answer[0]++;
else
answer[1]++;
}
return answer;
}
}
경이롭게도 거의 5배 가까이 차이가 난다.
역시 STL을 통해 코드를 간략하게 할 수는 있었으나 Linq 라이브러리 포함 사실만으로 거의 0.08ms가 느려졌다.
데이터의 크기에 따라 달라질 수는 있겠으나 저용량 데이터는 확실히 간략한 조건문과 반복문만으로 이루어진 코드가 제일 빠른 것 같다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[Programmers] 입문) 피자 나눠 먹기 (3) (0) | 2023.06.27 |
---|---|
[Programmers] 입문) 문자열 뒤집기(반전) (0) | 2023.06.27 |
[Programmers] 입문) 피자 나눠 먹기(1) (0) | 2023.06.27 |
[Programmers] 입문) 배열 뒤집기 (0) | 2023.06.27 |
[Programmers] 입문) 배열 원소의 길이 (0) | 2023.06.27 |