프로그래머스 - 모음 사전(Level 2)
2024. 1. 10. 17:45ㆍ코딩테스트 정리(자바)
728x90
만들 수 있는 단어가 5^5개밖에 안되기 때문에 모든 단어를 다 순회해서 구한다
상태: 현재까지 만든 단어 (word)
종료조건: 단어의 길이가 5인 경우
점화식: (word)=[word] + (word+'A') + (word+'E') + (word+'I') + (word+'O') + (word+'U')
import java.util.ArrayList;
import java.util.List;
public class 모음_사전 {
private static final char[] vowel="AEIOU".toCharArray();
public List<String> generate(String word){ //재귀호출이 사전순으로 진행되게 된다
List<String> words=new ArrayList<>();
words.add(word); //현재까지 만든 단어 word를 리스트에 담기
if(word.length()==5) //만든 단어의 길이가 5이면 리스트 리턴 후 종료
return words;
for(char ch:vowel){ //word 뒤에 하나씩 붙여가며 생성 후 리스트에 담기
words.addAll(generate(word+ch)); //addAll() : 컬렉션 안의 객체들을 모두 리스트에 담는다
}
return words;
}
public int solution(String word) {
return generate("").indexOf(word); //빈문자열을 넘겨주어 index는 ""가 0, "A"가 1이 된다.
//따라서 word와 같은 단어의 인덱스 반환 가능
}
}
1. char을 문자열과 연결하면 합쳐진 문자열이 반환된다
최적화된 코드
: 매 호출마다 리스트를 생성하지 않고 넘겨주기
import java.util.ArrayList;
import java.util.List;
public class 모음_사전 {
private static final char[] vowel="AEIOU".toCharArray();
public void generate(String word, List<String> words){
words.add(word);
if(word.length()==5)
return;
for(char ch:vowel){
generate(word+ch,words);
}
}
public int solution(String word) {
List<String> words=new ArrayList<>();
generate("",words);
return words.indexOf(word);
}
}
728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 카펫 (Level 2) (0) | 2024.01.11 |
|---|---|
| 프로그래머스 - 모의고사 (Level 1) (2) | 2024.01.11 |
| 프로그래머스 - 하노이의 탑(Level 3) (0) | 2024.01.09 |
| 프로그래머스 - 쿼드 압축 후 개수 세기(Level 2) (2) | 2024.01.08 |
| 재귀함수 (0) | 2024.01.08 |