
🧫 문제 분석
✔️ 출처
📖 문제

정말 어려워했던 문제이다.
결국에는 풀었다.
A : 1
E : 2
I : 3
O : 4
U : 5
로 바꾸고
이에 맞춰서 완전탐색을 해서 매개변수로 넘어온 word 와 equals로 비교한 후 같다면
깊이 탐색을 멈추고 count를 반환한다.
🔅 문제 풀이
class Solution {
int count = 0;
boolean flag = false;
StringBuilder sb = new StringBuilder();
public int solution(String word) {
dfs(trans(word), 0);
return count;
}
private void dfs(String word, int depth) {
if (sb.toString().equals(word)) {
flag = true;
return;
}
if (depth > 4) {
return;
}
for (int i = 1; i <= 5; i++) {
if (flag) return;
count++;
sb.append(i);
dfs(word, depth+1);
sb.deleteCharAt(sb.length() - 1);
}
}
private String trans(String word) {
String s = "";
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == 'A') s += '1';
else if (word.charAt(i) == 'E') s += '2';
else if (word.charAt(i) == 'I') s += '3';
else if (word.charAt(i) == 'O') s += '4';
else if (word.charAt(i) == 'U') s += '5';
}
return s;
}
}

🔅 다른 사람 풀이를 참고하여 리팩토링
class Solution {
int count = 0;
boolean flag = false;
StringBuilder sb = new StringBuilder();
public int solution(String word) {
dfs(word, 0);
return count;
}
private void dfs(String word, int depth) {
if (sb.toString().equals(word)) {
flag = true;
return;
}
if (depth > 4) return;
for (int i = 1; i <= 5; i++) {
if (flag) return;
count++;
sb.append("AEIOU".charAt(i - 1));
dfs(word, depth+1);
sb.deleteCharAt(sb.length() - 1);
}
}
}

2~3배는 빨라진것 같다.
❗ 오답노트 / 필요한 지식
- 배울점이 많다. 문자열 charAt은 알고 있었으면서 저렇게 쓰는법을 몰라서 하나하나 숫자로 변환하니 느릴 수 밖에 없다. 잘 기억하자.
'baekjoon > Graph_Search' 카테고리의 다른 글
백준 1107번 : 리모컨 [자바] (0) | 2025.03.07 |
---|---|
백준 16928번 : 뱀과 사다리 게임 [자바] (0) | 2025.03.07 |
백준 2206번 : 벽 부수고 이동하기 자바 (0) | 2024.08.22 |
백준 1600번 : 말이 되고픈 원숭이 자바 (0) | 2024.08.22 |
백준 10026번 : 적록색약 자바 (0) | 2024.08.21 |