반응형
문제설명
- 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다.
- 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다.
- 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
제한사항
- 3 ≤ number의 길이 ≤ 13<//li>
- -1,000 ≤ number의 각 원소 ≤ 1,000
- 서로 다른 학생의 정수 번호가 같을 수 있습니다.
입출력 예
d 배열 | result |
[-2, 3, 0, 2, 5] | 2 |
[-3, -2, -1, 0, 1, 2, 3] | 5 |
[-1, 1, -1, 1] | 0 |
[ 내가 푼 방법 ]
import java.util.Arrays;
class Solution {
static int answer = 0;
public int solution(int[] number) {
combination(number, 3, 0, 0, new int[3]);
return answer;
}
public static void combination(int[] number, int limit, int startIdx, int cnt, int[] selectArr) {
// 종료조건
if (cnt == limit) {
answer += Arrays.stream(selectArr).sum() == 0? 1 : 0;
return;
}
for (int i=startIdx; i<number.length; i++) {
selectArr[cnt] = number[i];
combination(number, limit, i+1, cnt+1, selectArr);
}
}
}
재귀함수를 이용한 조합 코드로 구현
- 종료 조건
- for문 안에서 가지치기 방식으로 재귀함수 호출
조합 설명은 아래에!
[Java] 조합 알고리즘 java 코드로 구현하기
조합이란? 배열에서 몇개를 중복없이 추출하는 것을 말한다. 예를 들면, 배열 int[] arr = {1, 2, 3, 4} 에서 2개의 요소만 중복없이 추출하고 싶은 경우 [1, 2], [2, 3], [3, 4] [1, 3], [2, 4] [1, 4] 총 6개가 출력
dev-stack.tistory.com
[ 다른 풀이방법 ]
class Solution {
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;
}
}
중첩 for문을 사용하여 조합보다 더 간단하게 구현하였다.
for문의 인덱스 i, j, k의 초기값을 바깥 for문의 idx + 1을 해주어서 이전 idx를 선택하지 않도록 함!
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 내 마음대로 정렬하기 - Java(자바) (0) | 2023.02.17 |
---|---|
[프로그래머스] 1차 비밀지도 - Java(자바) (0) | 2023.02.10 |
[프로그래머스] 시저암호 - Java(자바) (2) | 2023.01.30 |
[프로그래머스] 두 개 뽑아서 더하기 - Java(자바) (0) | 2022.10.30 |
[프로그래머스] 나누어 떨어지는 숫자 배열 - Java(자바) (0) | 2022.10.18 |