Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Room
- Kotlin
- Database
- IntelliJ
- sourcetree
- ViewModel
- Algorithm
- rxjava
- homebrew
- git
- library
- github
- Jetpack
- leetcode
- Version
- FRAGMENT
- androidstudio
- Java8
- programmers
- ReactiveProgramming
- livedata
- Android
- Java
Archives
- Today
- Total
Learn & Run
[Programmers] 모음 사전 (Java, Kotlin) 본문
https://programmers.co.kr/learn/courses/30/lessons/84512
문제
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 반환하면 됩니다.
접근 아이디어
1. AEIOU 중에서 A를 하나씩 늘려나가고 마지막에서는 AEIOU 순으로 진행하는 것을 생각해보니 DFS 알고리즘을 적용해보면 좋을 것 같다고 생각했습니다.
2. DFS 알고리즘을 적용하면서 멤버 변수인 count를 이용하여 몇 번째 단어인지 카운팅하였습니다.
3. 입력값으로 들어온 word와 매칭되는 다음 문자열이 있다면 isStop을 true로 바꾸어 DFS 알고리즘을 모두 종료시켜 성능을 개선하였습니다.
조심해야할 점
5글자인 상태에서 DFS 함수를 한 번 더 타고들어가야 종료되기 때문에, 다음 길이가 6미만인 지점에서만 count 변수에 1을 추가했습니다.
- Java
class Solution {
char[] aeiou = {'A','E','I','O','U'};
int count = 0;
boolean isStop = false;
public int solution(String word) {
dfs(0, "", word);
return count;
}
public void dfs(int depth, String next, String target) {
if (depth == 6) return;
if (next.equals(target)) {
isStop = true;
return;
}
for (int i=0; i<5; i++) {
if (isStop) return;
if(depth + 1 < 6) count++;
dfs(depth + 1, next + aeiou[i], target);
}
}
}
- Kotlin
class Solution {
val aeiou = charArrayOf('A','E','I','O','U')
var count = 0
var isStop = false
fun solution(word: String): Int {
dfs(0, "", word)
return count
}
fun dfs(depth: Int, next: String, target: String) {
if(depth == 6) return
if(next == target) {
isStop = true
return
}
for (each in aeiou) {
if(isStop) return
if(depth + 1 < 6) count++
dfs(depth + 1, next.plus(each), target)
}
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 오픈 채팅방 (Java, Kotlin) (0) | 2021.09.07 |
---|---|
[Programmers] 복서 정렬하기 (Java, Kotlin) (0) | 2021.09.06 |
[Programmers] 실패율 (Java, Kotlin) (0) | 2021.08.30 |
[Programmers] 신규 아이디 추천 (Java, Kotlin) (0) | 2021.08.29 |
[Programmers] 직업군 추천하기 (Java, Kotlin) (0) | 2021.08.29 |