https://school.programmers.co.kr/learn/courses/30/lessons/84512
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음엔 규칙성을 찾아 풀어보았다.(solution1())
각 자리의 문자가 1개 증가할때마다 각각 781, 156, 31, 6, 1 씩 증가한다.
속도는 빠르지만....
이 규칙을 찾기가 쉽지 않을 뿐더러, 문제 조건이 바뀌면 다시 계산해야하는 문제가 있기때문에..
얌전히 dfs로 다시 풀었다.(solution())
class Solution {
int answer = 0;
boolean complete = false;
public int solution(String word) {
String[] chars = { "A", "E", "I", "O", "U" };
for (String c : chars) {
find(chars, word, c);
}
return answer;
}
void find(String[] chars, String word, String comp) {
if (comp.length() > 5) return;
if (!complete) answer++;
if (word.equals(comp)) {
complete = true;
}
if (complete) return;
for (String c : chars) {
find(chars, word, comp + c);
}
}
final int[] weight = { 781, 156, 31, 6, 1 };
public int solution1(String word) {
char[] split = word.toCharArray();
int answer = 0;
for (int i = 0; i < split.length; i++) {
char c = split[i];
int idx = idx(c);
answer += (weight[i] * idx + 1);
}
return answer;
}
int idx(char c) {
switch(c) {
case 'A' : return 0;
case 'E' : return 1;
case 'I' : return 2;
case 'O' : return 3;
case 'U' : return 4;
}
return -1;
}
}