코딩테스트 - 프로그래머스/JAVA

[프로그래머스 / 완전탐색 / 자바(JAVA)] 모음사전

읁; 2024. 5. 22. 12:54

[프로그래머스 / 완전탐색 / 자바(JAVA)] 모음사전

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[ 요약 ]

더보기

시작 시간 : AM 8:56

종료 시간 : AM 9:46

소요 시간(분) : 50분.. 인데, 로직을 참고했기 때문에 의미 없음

 

도전 횟수 (제출 횟수) : 의미 없음

로직 및 풀이 참고 여부 : O

https://20240228.tistory.com/56

 

[ 풀어보기 ]

 

정답 풀이

📌 로직

https://20240228.tistory.com/56 이 분의 로직을 참고했다.

  1. 일단.. 사전을 만들어줄 재귀함수 구현하기. 조금 간소화해서, ABC라는 문자열을 사용한다고 가정해 본다면
    • 이렇게 이해해볼 수 있을 것.
  2. AEIOU라는 5글자를 사용하므로,
    • 길이가 5가 되면 재귀함수를 빠져나오도록,
    • A, E, I, O, U 중 U까지 도달했을 경우 반복문을 빠져나오도록,

재귀함수를 설계하면 된다.

 

📌 코드

import java.util.*;

class Solution {
    
    List<String> dic = new ArrayList<>(); // 사전
    
    public int solution(String word) {

        char[] charArr = word.toCharArray();
        StringBuffer sb = new StringBuffer();
        
        makeDic("");
        
        for(char a : charArr) {
            switch(a) {
                case 'A' :
                    sb.append(0);
                    break;
                case 'E' :
                    sb.append(1);
                    break;
                case 'I' :
                    sb.append(2);
                    break;
                case 'O' :
                    sb.append(3);
                    break;
                case 'U' :
                    sb.append(4);
                    break;
            }
        }
        
        
        return dic.indexOf(sb.toString()) + 1;
        // 해당하는 단어의 인덱스를 return한다.
        // 0부터 등록되었으므로, 1을 더해준다.
    }
    
    private void makeDic(String current) {
        if(current.length() == 5) return;
        	// 현재 문자열의 길이가 5가 되면 반복문을 빠져나온다.
        
        for(int i=0; i<5; i++) {
        // A, E, I, O, U 순서대로, 0, 1, 2, 3, 4라고 가정한다.
            String next = current + i; // 현재 문자열에 i를 누적한다.
            dic.add(next); // 이를 dictionary에 추가한다.
            makeDic(next); // 재귀함수를 호출한다.
        }
    }
}

 

📌 채점 결과

정확성  테스트
테스트 1 〉	통과 (20.74ms, 82.8MB)
테스트 2 〉	통과 (17.40ms, 73MB)
테스트 3 〉	통과 (13.20ms, 76.4MB)
테스트 4 〉	통과 (17.28ms, 74.2MB)
테스트 5 〉	통과 (13.32ms, 78.9MB)
테스트 6 〉	통과 (17.78ms, 74.6MB)
테스트 7 〉	통과 (13.37ms, 76.8MB)
테스트 8 〉	통과 (18.51ms, 78.7MB)
테스트 9 〉	통과 (19.78ms, 80.8MB)
테스트 10 〉	통과 (19.96ms, 70.5MB)
테스트 11 〉	통과 (16.28ms, 82.3MB)
테스트 12 〉	통과 (12.64ms, 78.7MB)
테스트 13 〉	통과 (16.29ms, 80.9MB)
테스트 14 〉	통과 (12.21ms, 82.4MB)
테스트 15 〉	통과 (12.96ms, 83.9MB)
테스트 16 〉	통과 (14.45ms, 74.7MB)
테스트 17 〉	통과 (18.14ms, 80.4MB)
테스트 18 〉	통과 (13.70ms, 72.9MB)
테스트 19 〉	통과 (16.91ms, 79.2MB)
테스트 20 〉	통과 (13.65ms, 82.5MB)
테스트 21 〉	통과 (17.60ms, 84.3MB)
테스트 22 〉	통과 (12.65ms, 78.5MB)
테스트 23 〉	통과 (21.44ms, 76MB)
테스트 24 〉	통과 (16.89ms, 82.6MB)
테스트 25 〉	통과 (15.56ms, 76.3MB)
테스트 26 〉	통과 (15.30ms, 79.2MB)
테스트 27 〉	통과 (14.77ms, 85.5MB)
테스트 28 〉	통과 (12.64ms, 79.9MB)
테스트 29 〉	통과 (15.44ms, 78.3MB)
테스트 30 〉	통과 (16.50ms, 78.7MB)
테스트 31 〉	통과 (12.61ms, 78.9MB)
테스트 32 〉	통과 (13.90ms, 76MB)
테스트 33 〉	통과 (12.54ms, 68.4MB)
테스트 34 〉	통과 (16.65ms, 79.3MB)
테스트 35 〉	통과 (13.28ms, 83.9MB)
테스트 36 〉	통과 (18.21ms, 87.5MB)
테스트 37 〉	통과 (18.54ms, 74.5MB)
테스트 38 〉	통과 (25.62ms, 83.9MB)
테스트 39 〉	통과 (16.79ms, 76.5MB)
테스트 40 〉	통과 (29.87ms, 89.4MB)

채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 


[배운 점]

 

📌 배운 것

  1. 재귀함수의 구조
 

[알고리즘] 재귀함수 再歸函數, recursion (JAVA)

재귀함수?정의자기 자신을 호출하는 함수.정의 단계에서 자신을 재참조하는 함수를 뜻한다. 어떤 사건이 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적(recursive)이라고 한다.  

eunzzzzz1.tistory.com