반응형
풀이
- 해당 문제는 자바로 재귀 문제를 해결해보고자 푼 문제로
- 두 가지 방법을 활용하여 해결해봄
- 우선 첫 번째로는 기본적이며 완전탐색하는 방법으로
- 모든 조합을 만든 다음 같은 문장을 찾는 방법으로 해결했으며
- 두 번째 방법은 join을 활용해서
- 현재 추가된 배열의 값과 같은 문자열을 찾으면 멈추는 방법으로 해결
- 두 가지 방법 모두 재귀와 백트래킹을 활용하여 해결했음
- 다만 계속 return 사용에 대한 혼동이와서 시간이 걸렸지만
- 이제 해결할 수 있을 것 같다.
- 혼동이 온 이유는 파이썬에서는 return에 대한 타입을
- 따로 정의하지 않다보니 어디부분에선 return 만 사용하고
- 어디부분에선 return {정수타입 변수} 로 하다보니
- 갑자기 혼동이 와서 헷갈렸었다.
// 첫 번째 방법
import java.util.*;
class Solution {
static List<String> li;
static String[] words = {"A","E","I","O","U"};
public int solution(String word) {
li = new ArrayList<>();
find("",0);
for (int i=0; i<li.size(); i++) {
if (word.equals(li.get(i))) return i;
}
return 0;
}
static void find(String str, int len) {
li.add(str);
if (len==5) return;
for (int i=0; i<5; i++) find(str+words[i],len+1);
}
}

// 두 번째 방법
import java.util.*;
import java.util.stream.Collectors;
class Solution {
static Deque<String> li;
static String[] words = {"A","E","I","O","U"};
static int cnt = 0;
public int solution(String word) {
li = new ArrayDeque<>();
return find(word);
}
static int find(String word) {
if ((word.length()==li.size())
&&(li.stream().map(String::valueOf).collect(Collectors.joining("")).equals(word))) return cnt;
else if (li.size()==5) return -1;
for (String w: words) {
li.add(w);
cnt++;
int check = find(word);
if (check != -1) return check;
li.pollLast();
}
return -1;
}
}

'알고리즘' 카테고리의 다른 글
[백준, 자바, 15649번] N과 M (1) (0) | 2024.09.05 |
---|---|
[프로그래머스, 자바, 1260번] DFS와 BFS (0) | 2024.09.05 |
[프로그래머스, 자바, 12911번] 다음 큰 숫자 (0) | 2024.09.04 |
[프로그래머스, 자바, 154538번] 숫자 변환하기 (1) | 2024.09.01 |
[SWEA, 자바, 1983번] 조교의 성적 매기기 (0) | 2024.08.29 |