재귀

박진은·2023년 8월 1일
0

코테

목록 보기
40/44
import java.util.*;
class Solution {
    
    Set<String> set = new HashSet<>();
    
    public void get(String[] alpa, int index, String tmp){
        if(index == alpa.length){
            String t = tmp.replaceAll(" ","");
            set.add(t);
            return;
        }
        
        for(int i = 0; i< alpa.length; i++){
            get(alpa, index+1, tmp+" ");
            get(alpa, index+1, tmp+alpa[i]);
        }
        
    }
    public int solution(String word) {
        int answer = 0;
        
        String[] alpa = new String[]{"A","E","I","O","U"};
        
        get(alpa,0,"");
        
        ArrayList<String> combination = new ArrayList<>();
        for(String s: set){
            combination.add(s);
        }
        combination.sort(String::compareTo);
        
    
        return combination.indexOf(word);
    }
}

위의 코드에서 제일 중요한 부분은 모음의 조합을 구하는 부분이다. 이를 위해서 가장 중요한 점은

        String[] alpa = new String[]{"A","E","I","O","U"};

해당 배열의 인덱스에 해당하는 문자열을 포함 시키는지 포함 하지 않는지에 대해서 모든 탐색이 이루어 져야한다. 따라서

        for(int i = 0; i< alpa.length; i++){
            get(alpa, index+1, tmp+" ");
            get(alpa, index+1, tmp+alpa[i]);
        }

위와 같이 전부 탐색하고 난후에 집합에 추가해서 중복된 문자열을 제거 했다. 조합을 구하는 법을 계속 까먹는다 병이다 병....

        combination.sort(String::compareTo);

위의 코드에서 볼 수 있듯이 정렬하기 위해서는 compare 함수 혹은 compareTo 함수를 전달해야하므로 함수 참조를 이용해서 해당함수를 전달했다.

profile
코딩

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기