2023. 5. 7. 15:42ㆍ코딩테스트/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/84512
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제를 풀 때 규칙을 찾는 것이 가장 중요하다고 생각이 듭니다.
1 A
2 AA
3 AAA
4 AAAA
5 AAAAA
6 AAAAE
7 AAAAI
8 AAAAO
9 AAAAU
10 AAAE
11 AAAEA
12 AAAEE
13 AAAEI
14 AAAEO
15 AAAEU
16 AAAI
17 AAAIA
18 AAAIE
19 AAAII
20 AAAIO
21 AAAIU
22 AAAO
23 AAAOA
24 AAAOE
25 AAAOI
26 AAAOO
27 AAAOU
28 AAAU
29 AAAUA
30 AAAUE
31 AAAUI
32 AAAUO
33 AAAUU
34 AAE
이런 순서로 단어의 순서가 정해지게 된다.
맨 처음 부분에서 알파벳의 글자의 수에 따라 순서가 정해지므로 문자열의 순서를 글자의 수로 초기화합니다.
int answer = word.length();
주어진 문자열의 마지막 1이 증가 할 때 변경되고 마지막에서 두번째에서 변경될 때는 6 세번째는 31
즉 f(n) = 5 * f(n - 1) + 1 (f(0) = 0) 이라는 공식이 만들어집니다.
이를 통해 각 자리마다 변경될 때의 수만큼을 배열로 만들어줍니다.
int[] increase = {781, 156, 31, 6, 1};
문자열의 인덱스를 통해 증가하는 횟수를 더해주면 됩니다.
for (int i = 0; i < word.length(); i++) {
int index = aeiou.indexOf(word.charAt(i));
answer += increase[i] * index;
}
따라서 위와 같은 코드가 완성되게 됩니다.
public class Solution84512 {
public int solution(String word) {
int answer = word.length();
String aeiou = "AEIOU";
// f(n) = 5 * f(n - 1) + 1 f(0) = 0
int[] increase = {781, 156, 31, 6, 1};
for (int i = 0; i < word.length(); i++) {
int index = aeiou.indexOf(word.charAt(i));
answer += increase[i] * index;
}
return answer;
}
public static void main(String[] args) {
String word = "AAAAE";
Solution84512 s = new Solution84512();
int result = s.solution(word);
System.out.println(result);
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 모의고사 자바 (0) | 2023.05.07 |
|---|---|
| 프로그래머스 최소직사각형 자바 (0) | 2023.05.07 |
| 프로그래머스 점프와 순간 이동(java) (0) | 2023.01.26 |
| 프로그래머스 예상 대진표(java) (0) | 2023.01.26 |
| 프로그래머스 N개의 최소공배수(java) (0) | 2023.01.19 |