
-Code
import java.util.*;
class Solution {
static char[] vowels = {'A', 'E', 'I', 'O', 'U'};
static int answer;
public int solution(String word) {
answer = 0;
// 문자열을 비교하기 위해 sb 사용
StringBuilder sb = new StringBuilder();
// DFS로 탐색
DFS(0, 5, sb, word);
return answer;
}
private static boolean DFS(int depth, int length, StringBuilder sb, String target) {
// 내가 찾는 문자열이면 true로 탈출
if (sb.toString().equals(target)) {
return true;
}
// 아니면 카운트 증가
answer++;
// 길이와 같으면 카운트 증가하고 다음 단어 없으므로 탈출
if (depth == length) {
return false;
}
// 모음을 돌면서 백트래킹
for (char vowel : vowels) {
// sb에 더하고 검사
sb.append(vowel);
// true가 반환되면 값이 구해진 것이므로 탈출
if (DFS(depth + 1, length, sb, target)) {
return true;
}
// 검사 다 끝나면 삭제
sb.deleteCharAt(depth);
}
// 다 돌았으면 이전 길이로 이동
return false;
}
}
처음에 for문을 사용해야 하나 하다가 길이가 달라지고 그거에 따라 stack 형식으로 값이 변화하는 것을 힌트롤 받고 DFS로 다음날 풀어보았습니다. 추가적으로 StringBilder가 메모리를 덜 차지하나 처음에 deleteCharAt 가 있는지 모르고 하다가 찾아보니 하나를 지우는 방법이 존재해서 적용했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 35106번 릴레이 가위바위보 게임 (0) | 2026.01.14 |
|---|---|
| [백준/Java] 1912번 연속합 (0) | 2026.01.13 |
| [백준/Java] 12026번 BOJ 거리 (0) | 2026.01.13 |
| [백준/Java] 11053번 가장 긴 증가하는 부분 수열 (0) | 2026.01.13 |
| [백준/Java] 34311번 QWERTY (0) | 2026.01.13 |