제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
Programmers 알고리즘 고득점 Kit입니다.
포인트
모음 배열의 사전순으로 정렬합니다. 그 이후 인덱스를 찾습니다.
소스코드
import java.util.*;
class Solution {
ArrayList<String> dict = new ArrayList<>();
String std = "AEIOU";
public void init(int num, int cnt, String cmd) {
if(num == cnt) {
dict.add(cmd);
return;
}
for(int i = 0; i < 5; i++){
init(num, cnt + 1, cmd + Character.toString(std.charAt(i)));
}
}
public int solution(String word) {
int answer = 0;
for(int i = 1; i <= 5; i++) {
init(i, 0, "");
}
Collections.sort(dict);
int idx = 1;
for(String s: dict) {
if(s.equals(word)){
answer = idx;
return answer;
}
idx++;
}
return answer;
}
}
코드 설명
- 클래스 변수
- dict: "AEIOU"로만 이루어진 단어들을 담을 리스트입니다. 이 리스트는 가능한 모든 단어를 사전 순으로 정렬한 후, 주어진 단어의 순서를 찾는 데 사용됩니다.
- std: 사용될 알파벳들이 담긴 문자열입니다. 즉, 'A', 'E', 'I', 'O', 'U'입니다.
- init 메서드
- 이 함수는 재귀적으로 호출되어 cmd라는 문자열을 구성해 나가면서 모든 가능한 단어를 dict 리스트에 추가합니다.
- num은 현재 단어의 길이를 나타내며, cnt는 현재까지 구성된 문자열의 길이를 나타냅니다. num과 cnt가 같으면, 즉 cmd가 길이에 맞게 완성되면 그 단어를 dict에 추가합니다.
- for 루프는 각 자리마다 'A', 'E', 'I', 'O', 'U' 중 하나의 문자를 선택하여, 해당 문자를 cmd에 붙여가며 재귀적으로 호출합니다.
- 이 방식은 길이 1부터 길이 5까지의 모든 가능한 단어를 생성합니다.
- solution 메서드
- init 메서드를 호출하여 길이가 1부터 5까지인 모든 단어를 dict에 추가합니다.
- 그런 후 dict를 사전 순으로 정렬합니다. 이때 사전 순 정렬은 문자열의 알파벳 순서에 맞춰 자동으로 이루어집니다.
- 정렬된 dict에서 주어진 word와 일치하는 단어를 찾아 그 순서(idx)를 반환합니다. idx는 1부터 시작하는 순번입니다.
- word가 발견되면 즉시 answer에 해당 값을 할당하고 반환합니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] Java 조이스틱 (2) | 2024.11.18 |
---|---|
[코딩테스트] Java 체육복 (3) | 2024.11.15 |
[코딩테스트] Java 전력망을 둘로 나누기 (0) | 2024.11.13 |
[코딩테스트] Java 피로도 (0) | 2024.11.13 |
[코딩테스트] Java 카펫 (0) | 2024.11.13 |