본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 4차 1번 (재귀함수 활용)

by 우공80 2022. 10. 27.
728x90

 

문제 지문 #1


어떤 단어가 XX 사전의 몇 번째 단어인지 알고 싶습니다. XX 사전에는 대문자 알파벳 'A', 'E', 'I', 'O', 'U'를 사용해 만들 수 있는 길이가 5 이하인 모든 단어가 수록되어 있습니다.

예를 들어, 사전의 첫 번째 단어는 "A"이고, 그다음은 "AA"입니다. 마지막 단어는 "UUUUU"입니다.

문자열 word가 매개변수로 주어질 때, word가 사전의 몇 번째 단어인지 return 하도록 solution 메서드를 작성했습니다. 그러나, 일부 코드가 잘못되어 코드가 바르게 동작하지 않습니다. 주어진 코드가 모든 입력을 바르게 처리하도록 코드를 수정해주세요. 코드는 _한 줄_만 수정해야 합니다.


매개변수 설명

문자열 word가 solution 메소드의 매개변수로 주어집니다.

  • word는 'A', 'E', 'I', 'O', 'U'로만 구성됩니다.
  • word의 길이는 5 이하입니다.

return 값 설명

사전에서 word가 몇 번째 단어인지 return 해주세요.


예시

word return
"AAAAE" 6
"AAAE" 10

예시 설명

사전엔 단어가 다음과 같이 수록됩니다. "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU", "AAAE",...

예시 #1
"AAAAE"는 여섯 번째에 나옵니다.

예시 #2
“AAAE”는 열 번째에 나옵니다.

728x90

혼자 풀이

한 줄 고치기 문제입니다. 재귀 함수라 머리가 빠질 것 같았는데요.
lev이 증가하지 않아서 재귀 함수를 무한 호출한다는 것은 발견해서 문제를 풀고,
재귀함수 로직에 대해서는 지금도 잘 이해가 안 되는데요. 재귀 함수를 호출할 때마다 단어의 글자 수가 하나씩 증가하는 구조이고, 처음 lev ==5 일 때 "AAAAA" , "AAAAE", "AAAAI", "AAAAO", "AAAAU"까지 만든 후에 해당 for문이 들어간 재귀 함수가 종료되고 그전에 호출되어 종료되지 않은 재귀 함수에서 "AAAE"부터 다시 5자리 단어를 가져오게 됩니다.

public class Solution {
    String[] vowels = {"A", "E", "I", "O", "U"};
    ArrayList<String> words;
    //사전 생성
    public void create_words(int lev, String str) {
        words.add(str); //처음 사전에는 ""공란만 존재 재귀호출을 할때마다 자리수가 늘어남
        for (int i = 0; i < 5; i++) { //for문을 반복하여 5자 이하 단어 생성
            if (lev < 5) { //lev의 값이 5보다 작으면 재귀호출 
            	//처음 입력받은 lev가 0이며, 다음 재귀호출부터 lev을 증가시킴
                //create_words(lev, str.concat(vowels[i]));
                create_words(lev+1, str.concat(vowels[i])); //재귀함수를 빠져나오려면 lev이 증가해야함
            }
        }
    }
    
    public int solution(String word) {
        int answer = 0;
        words  = new ArrayList<String>();
        create_words(0, "");
        //사전의 몇번째 단어인지 찾아서 반환
        for (int i = 0; i < words.size(); i++) {
            if (word.equals(words.get(i))) {
                answer = i;
                break;
            }
        }
        return answer;
    }

    // 아래는 테스트케이스 출력을 해보기 위한 코드입니다. 아래에는 잘못된 부분이 없으니, 위의 코드만 수정하세요.
    public static void main(String[] args) {
        Solution sol = new Solution();
        String word1 = new String("AAAAE");
        int ret1 = sol.solution(word1);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");

        String word2 = new String("AAAE");
        int ret2 = sol.solution(word2);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");
    }
}

정답


혼자 풀이와 정답이 동일합니다.

실습은 아래 참고


2022.10.25 - [Programming/Cos Pro 1급] - Cos Pro 1급 공부 사이트 추천 - 구름 에듀(https://edu.goorm.io/)

 

Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/)

구름 EDU??? YBM 공식 사이트에서 받은 문제 지문/문제 코드/정답 코드를 intellij에서 공부하다가 후배 추천으로 구름 에듀를 알게 되었습니다. 문제 지문 따로 문제 코드 따로 열어보는 게 여간 불

woogong80.tistory.com

 

 

728x90

댓글