728x90
https://programmers.co.kr/learn/courses/30/lessons/84512
문제 풀이
import java.util.HashMap;
public class Solution {
public static int solution(String word) {
HashMap<Character, Integer> hm = new HashMap<>();
hm.put('A', 0);
hm.put('E', 1);
hm.put('I', 2);
hm.put('O', 3);
hm.put('U', 4);
int a = 0, n = word.length(), c = 781, i;
for (i = 0; i < n; ++i) {
a += hm.get(word.charAt(i)) * c + 1;
c = (--c) / 5;
}
return a;
}
}
- 우선 사전의 모든 단어를 구함 ( + 몇 번째 단어인지 )
- 단어( key )와 몇번째의 단어인지( value ) 넣을 TreeMap<String,Integer> tm 생성
- 단어를 넣을 TreeSet<String> ts 생성 ( TreeSet이므로 기본이 오름차순 정렬 )
- char data[] = { 'A', 'E', 'I', 'O', 'U' } 생성 후 1개~5개씩 뽑은 조합을 ts에 넣음
- ts을 차례로 탐색하며 tm에 몇번째인지 값과 함께 넣어주고 확인
- 규칙을 찾음
- 첫 번째 글자는 data[] 배열에서의 인덱스 번호 값 * 781을 곱한 후 1을 더한 값을 더해주고,
- 두 번째 글자는 data[] 배열에서의 인덱스 번호 값 * 156을 곱한 후 1을 더한 값을 더해주고, ( (781-1) / 5 = 156 )
- 세 번째 글자는 data[] 배열에서의 인덱스 번호 값 * 31을 곱한 후 1을 더한 값을 더해주고, ( (156-1) / 5 = 31 )
- 네 번째 글자는 data[] 배열에서의 인덱스 번호 값 * 6을 곱한 후 1을 더한 값을 더해주고, ( (31-1) / 5 = 6 )
- 다섯 번째 글자는 data[] 배열에서의 인덱스 번호 값 * 1을 곱한 후 1을 더한 값을 더해준다. ( (6-1) / 5 = 1 )
- HashMap<Character,Integer> hm에 모음( key )과 인덱스번호값( value )을 넣어줌
- 입력받은 단어를 순차적으로 탐색
- hm에서 찾아 c( 초기값은 781이고, 이후 1을 빼고 5를 나누는 연산을 반복 )를 곱한 후 1을 더해줌
- 모두 더한 값 리턴
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 프로그래머스 ( Programmers )' 카테고리의 다른 글
[프로그래머스(Programmers)][자바(java)] (Lv2) 7주차 - 입실 퇴실 <위클리 챌린지> (0) | 2021.09.18 |
---|---|
[프로그래머스(Programmers)][자바(java)] (Lv1) 6주차 - 복서 정렬하기 <위클리 챌린지> (0) | 2021.09.10 |
[프로그래머스(Programmers)][자바(java)] (Lv1) 4주차 - 직업군 추천하기 <위클리 챌린지> (0) | 2021.08.26 |
[프로그래머스(Programmers)][자바(java)] (Lv3) 3주차 - 퍼즐 조각 채우기 <위클리 챌린지> (0) | 2021.08.26 |
[프로그래머스(Programmers)][자바(java)] (Lv1) 2주차 - 상호 평가 <위클리 챌린지> (0) | 2021.08.26 |