문제 지문 #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”는 열 번째에 나옵니다.
혼자 풀이
한 줄 고치기 문제입니다. 재귀 함수라 머리가 빠질 것 같았는데요.
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/)
'Programming > Cos Pro 1급' 카테고리의 다른 글
Cos Pro 1급 - 샘플 문제 풀이 4차 3번 (스키장 이용권 최소 비용 계산) (1) | 2022.10.28 |
---|---|
Cos Pro 1급 - 샘플 문제 풀이 4차 2번 (문자열 압축) (0) | 2022.10.27 |
Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/) (2) | 2022.10.25 |
Cos Pro 1급 - 샘플 문제 풀이 3차 10번 (Iterator를 이용한 List순회) (2) | 2022.10.21 |
Cos Pro 1급 - 샘플 문제 풀이 3차 9번 (숫자 배열의 구간별 합계) (1) | 2022.10.21 |
댓글