Algorithm/Java
[프로그래머스/JAVA] 모음사전
dbfl9911
2024. 9. 18. 22:08
https://school.programmers.co.kr/learn/courses/30/lessons/84512
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 풀이
1. 필드 및 변수 정의
static List<String> list;
static String[] words = {"A", "E", "I", "O", "U"};
list : 모든 단어를 저장할 리스트입니다.
2. 재귀 함수 (dfs)를 통한 단어 생성
static void dfs(String str, int depth) {
list.add(str);
if (depth == 5) return;
for (int i = 0; i < 5; i++) {
dfs(str + words[i], depth + 1);
}
}
- 처음에는 str이 빈 문자열 ""입니다.
- dfs 함수가 재귀적으로 모음 하나씩 붙여가며 단어를 만듭니다.
- "" → "A"
- "A" → "AA" → "AAA" → "AAAA" → "AAAAA"
- 이후 "AAAE", "AAAI", ... 같은 모든 조합을 만들어냅니다.
- 길이가 5인 단어까지 만들고 나면 더 이상 진행하지 않고 멈춥니다.
결과적으로 A로 시작하는 모든 단어들, E로 시작하는 모든 단어들, ... U로 시작하는 모든 단어들이 순서대로 리스트에 저장됩니다.
3. 주어진 단어가 몇 번째에 있는지 찾기
public int solution(String word) {
int answer = 0;
list = new ArrayList<>();
dfs("", 0);
int size = list.size();
for (int i = 0; i < size; i++) {
if (list.get(i).equals(word)) {
answer = i;
break;
}
}
return answer;
}
----문법 정리
List<String> list = new ArrayList<>();
list.get(0) // 0 위치의 값 반환
list.add("서울") // list의 가장 뒤에 서울 삽입
list.size() // 길이
- 정답 코드
import java.util.*;
class Solution {
static List<String> list; // 모든 단어 저장할 리스트
static String[] words = {"A", "E", "I", "O", "U"};
// 1. 재귀적으로 모든 단어를 생성하는 함수
static void dfs(String str, int depth) {
list.add(str);
if(depth == 5) return;
// 5개 모음 각각 붙여 재귀적으로 단어 생성
for (int i = 0; i < 5; i++) {
dfs(str + words[i], depth + 1); // str에 모음 붙여 다음 단계로 재귀 호출
}
}
// 2. 주어진 단어가 사전에서 몇번째 위치인지 찾음
public int solution(String word) {
int answer = 0;
list = new ArrayList<>();
dfs("", 0);
// list에서 주어진 단어가 몇번째 위치에 있는지 찾음
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(word)) {
answer = i;
break;
}
}
return answer;
}
}