https://programmers.co.kr/learn/courses/30/lessons/84512#qna
문제
이해
문제가 정해진 단어 안에서 규칙만 찾으면 되게 쉬울것 같다.
사전에 순서를 먼저 살펴보자
A - AA - AAA - AAAA -
AAAAA - AAAAE - AAAAI - AAAAO - AAAAU
AAAE
AAAEA -AAAEE - AAAEI - AAAEO - AAAEU
... 순서로 진행된다
설계
길이 5안에서 들어오는 문자열에 대해 자릿수별로 얼마만큼 늘어나는지 살펴보자
맨끝자리에 경우, AEIOU순서대로 바꿜때마다, 1씩 증가하게 되고
4번째 자리는 AEIOU순서대로 바꿜때마다 , 5번째 자리가 없는경우를 포함해 6씩 증가한다.
3번째 자리는 AEIOU순서대로 바꿜때마다 , 4번째 자리의 증가율 * 5 + 1 만큼 증가하여 31씩 증가하고
2번째 자리는 (31 * 5) +1 = 156 만큼
1번쨰 자리는 (156 * 5) +1 = 781만큼 증가한다.
이러한 점화식을 구했다면,
사전의 조합이 "AEIOU" 뿐 아니라 더 긴 조합이 INPUT으로 주어진다해도 문제를 풀 수 있을 것이다.
답은
초기 input word의 길이만큼의 시작 포인트에서
각 자릿수의 증가율을 더해주면 몇번째 사전인지 구할 수 있다.
풀이
class Solution {
public int solution(String word) {
String str = "AEIOU";
int[] x = {781,156,31,6,1};
int index,result=word.length();
for(int i=0;i<word.length();i++){
index = str.indexOf(word.charAt(i));
result+=x[i]*index;
}
return result;
}
}
다른사람의 풀이
class Solution {
public int solution(String word) {
int answer = 0, per = 3905;
for(String s : word.split("")) answer += "AEIOU".indexOf(s) * (per /= 5) + 1;
return answer;
}
}
이분은 781 * 5 의 수를 가지고 자릿수에 따라 나눠서 값을 사용해가면서 값을 더해주셨다.
나랑 설계는 비슷한데, 변수를 적게쓰시고 for문을 한줄로 줄여서 감탄따봉을 많이 받으신게 부럽다.
담번에 나도 초간결로 짜봐야지!..
'Algorithm > Weekly Solved' 카테고리의 다른 글
[2021 KAKAO] 신규 아이디 추천 - Java코드 (0) | 2021.11.24 |
---|---|
[백준 2941] 크로아티아 알파벳 - Java 코드 (0) | 2021.11.24 |
[위클리챌린지] 8주 - 최소 직사각형 - Java코드 (0) | 2021.10.25 |
[위클리챌린지] 7주 - 입실 퇴실 - Java코드 (0) | 2021.09.24 |
[위클리챌린지] 6주 - 복서 정렬하기 - Java코드 (0) | 2021.09.24 |