-
프로그래머스 - 삼총사알고리즘 2022. 10. 15.반응형
내 풀이
public class P_43 { public static int ans = 0; public int solution(int[] number) { int[] list = new int[number.length-1]; if(number.length < 3) { // 더이상 더할 수가 없을 경우 탈출 return ans; } for(int i=0; i<number.length; i++) { if(i+1 != number.length) { list[i] = number[i+1]; } for(int j=i+2; j<number.length; j++) { if(i == number.length) { break; } int x = number[0] + number[i+1] + number[j]; if(x == 0) { ans++; } } } return solution(list); } public static void main(String[] args) { // 삼총사 P_43 p = new P_43(); int[] number = {-3, -2, -1, 0, 1, 2, 3}; System.out.println(p.solution(number)); } }
재귀로 풀었다.
재귀로 돌리면서 ans 반환값을 인자로 넣어서 빼려고 했더니 프로그래머스에서 매개 변수는 int형 배열 하나만 받게끔 되어 있었다.
그래서 어쩔 수 없이 static으로 공용 변수로 빼서 사용했다.
실무에서는 static 변수는 사용하지 않는게 좋다. 꼭 써야한다면 private로 변수 못건들게 막아놓고 getter, setter 메소드 정의를 해주는게 좋다.
총 3개의 요소를 더하는게 포인트라서 재귀 탈출의 조건을 요소의 갯수 카운팅으로 줬다.
풀이 방식은 순열을 생각하면서 풀었다.
결국은 원소 첫번째 부터 3개씩 한번씩 다 찍어보면 풀 수 있다.
가장 간단한 방법으론 for문 3중첩인데 아무래도 3중첩으로 풀고 싶진 않았다.
그래서 생각한건 어차피 매개변수로 int형 배열을 받으니까 이미 계산이 끝난 요소는 빼고 남은 요소들이 있는 배열을 넘겨주면 for문을 3중첩까지 할 필요는 없을 것 같았다.
그렇게 조건에 걸릴때까지 재귀를 하면 답을 구할 수 있다.
순열이란 ?
서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관있게 선택하는 혹은 나열하는 것을 순열이라고 한다.
다른 사람 풀이
class Solution { public int solution(int[] number) { int answer = 0; int n = number.length; for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { for(int k = j + 1; k < n; k++) { if(number[i] + number[j] + number[k] == 0) answer++; } } } return answer; } }
아직 문제가 나온지 하루밖에 되지 않아서 괜찮아 보이는 풀이법이 안보인다.
나중에 추가할 예정
가장 많은 사람들이 푼 방식인 3중첩 for문이다.
3개의 요소를 더하는 것이니 말 그대로 반복문을 3번 돌리면 된다...
반응형'알고리즘' 카테고리의 다른 글
프로그래머스 - 크기가 작은 부분문자열 (0) 2023.01.24 프로그래머스 - 콜라 문제 (0) 2022.11.04 프로그래머스 - 체육복 (0) 2022.08.19 프로그래머스 - 실패율 (0) 2022.08.04 프로그래머스 - 약수의 개수와 덧셈 (0) 2022.07.24