-
[프로그래머스/JAVA] 모음사전Algorithm 2024. 9. 18. 22:08
https://school.programmers.co.kr/learn/courses/30/lessons/84512
- 문제 풀이
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; } }
'Algorithm' 카테고리의 다른 글
[프로그래머스/JAVA] 타겟 넘버 (0) 2024.09.18 [알고리즘/JAVA] 문법 정리 (0) 2024.09.18 [프로그래머스/JAVA] 카펫 (0) 2024.09.18 [프로그래머스/JAVA] 소수찾기 (0) 2024.09.18 [프로그래머스/JAVA] 전력망을 둘로 나누기 (0) 2024.09.18