프로그래머스 삼총사

채종윤·2023년 8월 21일
0

📔 문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/131705


📝 문제 풀이

// 중복배제
public class 경우의수3_조합 {
	static int[] arr; //원소
	static int n ; // 답의 길이 ,깊이
	static boolean[] visited; //사용여부
	static int[] result; //답 저장배열
	public static void main(String[] args) {
		// 원소 {1,2,3} 에 대한 모든 숫자 조합
		
		arr = new int[] {1,2,3};  //반복 할 숫자
		n = 2; //출력할 숫자 조합 길이
		result = new int[n]; //정답 저장할 배열
		visited = new boolean[arr.length]; 
		recur(0,0); //깊이 0, 시작 위치 0 전달
		
	}
	private static void recur(int depth, int start) { // start
		//종료조건
		if(depth==n) { //깊이와 답 길이가 동일하면
		printResult(); //result 값 출력
		return; //else안쓰려고 return을 씀
	}
		//처리코드(result에 숫자 누적)
		for (int i = start; i < arr.length; i++) { //i는 0부터가 아니라 start
			if(visited[i]==false) { // arr[i]의 숫자가 미 사용인 경우에만 사용	
				result[depth] =arr[i]; //깊이 자리에 i번째 숫자저장
				visited[i]=true;
				recur(depth+1,i+1); // 깊이증가 후 재귀호출 ,arr[1]은썻으니 arr[2]부터 쓰시오. 
				visited[i]=false;
		}}
		}
	//답 출력
	private static void printResult() {

		for (int i : result) { //result에서 순서대로 추출
			System.out.print(i);	//붙여서 출력 
		}
		System.out.println();
		
	}
}
//부분집합과 다른점은, 무조건 r개를 뽑아야 한다는 것이다

💡 내 코드

import java.util.*;
class Solution {
    static int[] result;
    static boolean[] check;
    static int answer;
    public int solution(int[] number) {
        
        result = new int[3];
        check = new boolean[number.length];  
        re(0,number.length,number,0);  
        return answer;
    }
    public static void re(int depth,int n, int[] arr,int start){
        if( depth == 3){
            int sum=0;
            for( int i : result){
                sum +=i;   
            }
            if(sum==0){
                answer++;
            }         
            return;
        }         
        
        for(int i =start; i< n; i++){
            if(check[i]==false){
                check[i] =true;
                result[depth] = arr[i];           
                re(depth+1,n,arr,i+1);
                check[i]=false;           
        }
        
    }
}
}
profile
안녕하세요. 백앤드 개발자를 목표로 하고 있습니다!

0개의 댓글