[프로그래머스 / 완전탐색 / 자바(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 이 분의 로직을 참고했다.
- 일단.. 사전을 만들어줄 재귀함수 구현하기. 조금 간소화해서, ABC라는 문자열을 사용한다고 가정해 본다면
- 이렇게 이해해볼 수 있을 것.
- 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
[배운 점]
📌 배운 것
- 재귀함수의 구조
[알고리즘] 재귀함수 再歸函數, recursion (JAVA)
재귀함수?정의자기 자신을 호출하는 함수.정의 단계에서 자신을 재참조하는 함수를 뜻한다. 어떤 사건이 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적(recursive)이라고 한다.
eunzzzzz1.tistory.com
'코딩테스트 - 프로그래머스 > JAVA' 카테고리의 다른 글
[프로그래머스 / 힙(Heap) / 자바(JAVA)] 더 맵게 (0) | 2024.05.24 |
---|---|
[프로그래머스 / 스택/큐 / 자바(JAVA)] 주식가격 (0) | 2024.05.23 |
[프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / 자바(JAVA)] [3차] n진수 게임 (0) | 2024.05.21 |
[프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / 자바(JAVA)] [3차] 압축 (0) | 2024.05.20 |
[프로그래머스 / 깊이/너비 우선 탐색(DFS/BFS) / 자바(JAVA)] 게임 맵 최단거리 (1) | 2024.05.19 |