안녕하세요. delay100 입니다.
벌써 토요일.. 시간이 멈췄으면 좋겠어요 ... 눈 꿈뻑하면 일주일이 지나가니..!!!!
아무튼 오늘의 TIL 미션(?) 시작합니다!
미들러 문제. 모음사전
https://school.programmers.co.kr/learn/courses/30/lessons/84512
처음에는 문제를 봤을 때 백준의 N, M이랑 같은 유형인가?.. 싶어서 백트래킹을 어떻게 해야하지 고민했었습니다..
그런데 A가 5번 나올수도 있고 순서가 A, AA, AAA, AAAA, AAAAA, AAAAE, AAAAI, AAAAO, AAAAU, AAAE, AAAI..
이런식으로 진행되다보니 도달하게 되는 알파벳 개수가 다르기 때문에 백트래킹은 안될 것 같다고 판단했습니다.
사실 문제의 규칙성 자체도 잘 이해가 되지 않았지만요..
1. 성공 코드 - 규칙을 이용해 해결
아무리 머리를 싸매도 이해가 안돼서 .. 풀이의 힌트를 얻고자 아래의 게시글을 찾게 되었습니다.
https://school.programmers.co.kr/questions/25140
list = 781, 156, 31, 6, 1을 저장합니다.
전체 합/각 index내에 있던 값을 저장했습니다. 모든 테스트에서 위와 같은 list가 생성되게 됩니다.
왜냐하면 모든 테스트에서 동일하게 A, E, I, O, U 사전을 이용하기 때문입니다.
answer += (list[i]*num + 1);
각 word를 순환하면서 num 값은 A(0), E(1), I(2), O(3), U(4)로 계산합니다.
자릿수에 따른 list[index]*자리의 값(num)을 해주고, 이 값은 차이값이기 때문에 1을 더해주어야 합니다.
i=0부터 시작하므로,
A=(781*0 + 1) = 1
AAAE= 1+1+1+(6*1 + 1) = 10
EIO = (781*1 + 1) + (156*2 + 1) + (31*3 + 1) = 1189
여기서 계속 +1을 해주는 이유는 +1을 해야 A의 경우의 수가 추가되기 때문입니다.
class Solution {
public int solution(String word) {
int answer = 0;
int wordLength = word.length();
int[] list = new int[5];
list[0] = 5;
int sum = list[0];
for(int i=1; i<5; i++) {
list[i] = list[i-1]*5;
sum += list[i];
}
for(int i=0; i<5; i++) {
list[i] = sum/list[i]; // 간격으로 변경
}
// for(int i=0; i<list.length; i++) {
// System.out.print(list[i]+" ");
// }
// System.out.println();
for(int i=0; i<wordLength; i++) {
int num = 0;
switch (word.charAt(i)) {
case 'A': {
num = 0;
break;
}
case 'E': {
num = 1;
break;
}
case 'I': {
num = 2;
break;
}
case 'O': {
num = 3;
break;
}
case 'U': {
num = 4;
break;
}
}
answer += (list[i]*num + 1);
// System.out.println(answer);
}
return answer;
}
}
* 규칙을 파악했던 게시글
+ 비기너 문제
과일 장수 (https://school.programmers.co.kr/learn/courses/30/lessons/135808)
+ 챌린저 문제
혼자서 하는 틱택토(https://school.programmers.co.kr/learn/courses/30/lessons/160585)
봐주셔서 감사합니다. 피드백 환영합니다.
'항해99 > 99club1기TIL' 카테고리의 다른 글
[99club/TIL] 4주차 - 월요일 TIL(Today I Learned) (0) | 2024.04.16 |
---|---|
[99club/TIL] 3주차 - 일요일 TIL(Today I Learned) (0) | 2024.04.14 |
[99club/TIL] 3주차 - 금요일 TIL(Today I Learned) (0) | 2024.04.12 |
[99club/TIL] 3주차 - 목요일 TIL(Today I Learned) (0) | 2024.04.11 |
[99club/TIL] 3주차 - 화요일 TIL(Today I Learned) (0) | 2024.04.09 |