문제 소개
풀이
public class Pr131705 {
public int solution(int[] number) {
int answer = 0;
for(int i = 0; i < number.length-2; i++) {
for(int j = i+1; j < number.length-1; j++) {
for(int k = j+1; k < number.length; k++) {
if(number[i] + number[j] + number[k] == 0) {
answer ++;
}
}
}
}
return answer;
}
}
- 문제는 Bruteforce를 이용해서 풀어보았다.
i
,j
,k
를 통해 각 숫자를 골라 모든 경우의 수를 둘러볼 수 있는 3중 for문을 선택하게 되었다.- 문제는 풀었지만, 문득 처음에 생각났던 방식은 DFS 였기에 다른 방식의 구현이 더 좋을 수도 있지 않을까 라는 생각이 문득 들었고, 테스트를 해보았다.
- 왼쪽은 DFS, 오른쪽은 Bruteforce를 이용한 코드의 실행결과이다.
- 결과는 큰 차이는 없었지만 전체적으로 Brute force가 더 좋은 성능을 보였다.
- 이는 number 길이 제한이 매우 짧아서 그랬던 것이라 생각이 들어 길이를 1000까지 늘려 추가로 실험해보았다.
- 실행 결과는 DFS는 56초, Brute force는 0.2 초로 상당히 많은 차이가 있음을 알게 되었다.
- 이는 3중 for문으로 구현한 방식과 재귀를 통해 구현한 방식에 차이가 있었다는 것을 알게되었고, 항상 완전탐색보다 DFS가 좋은 건 아니라는 것을 제대로 느끼게 되었다.
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] - 42885_구명보트 (0) | 2024.06.05 |
---|---|
[프로그래머스] - 42860_조이스틱 (0) | 2024.06.04 |
[프로그래머스] - 147355_크기가 작은 부분 문자열 (0) | 2023.10.25 |
[프로그래머스] - 12930_이상한 문자 만들기 (1) | 2023.10.23 |
[프로그래머스] - 12982_예산 (0) | 2023.10.20 |