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);
    }
}
  1. 처음에는 str이 빈 문자열 ""입니다.
  2. dfs 함수가 재귀적으로 모음 하나씩 붙여가며 단어를 만듭니다.
    • "" → "A"
    • "A" → "AA" → "AAA" → "AAAA" → "AAAAA"
    • 이후 "AAAE", "AAAI", ... 같은 모든 조합을 만들어냅니다.
  3. 길이가 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;
    }
}