728x90
반응형
문제 설명
- 알파벳 모음 **A, E, I, O, U**만을 사용하여 길이가 1부터 5까지인 모든 단어가 사전에 정렬되어 있다고 가정하자.
- 이는 5진수로 이루어진 숫자라고 생각하면 된다.
- 각 자리의 모음 알파벳은 5진수 숫자로 대응되며 해당 알파벳이 가지는 가중치 만큼의 int값을 return 한다.
- 예 : 'A' 의 경우에는 1을 의미한다.
- 'AA'의 경우에는 2를 의미한다.
- 'AAA'는 3, 'AAAA'는 4, 'AAAAA'는 5를 의미하므로 'AAAAE'는 6을 의미한다.
위 설명을 바탕으로 각각의 자리 마다 가질 수 있는 가중치를 미리 계산해서 (배열의 크기를 정해줘야 하기 때문에) 반복문을 돌려주자,
5진수로 가정하지만 첫번째 숫자를 1로 대입시켜 주기 때문에 return 받는 숫자 값과 인덱스는 다르게 생각해야 한다.
즉 인덱스에서 'A'는 0, 'E'는 1, 'I'는 2, 'O'는 3, 'U'는 4로 매칭해지만
return할 숫자에서는 'A'는 1, 'E'는 2, 'I'는 3, 'O'는 4, 'U'는 5로 매칭해야 한다.
그리고 각각의 자리에서 가능한 최대한의 가중치 만큼 배열 크기를 잡아준다.
가중치는 5진수의 거듭제곱의 크기 만큼 차지하게 된다. 각각의 자리에서 가지는 가중치의 공식은 다음과 같다.
- 첫번째 자리 가중치 = 54 + 53 + 52 + 51 + 1
- 두번째 자리 가중치 = 53 + 52 + 51 + 1
- 세번째 자리 가중치 = 52 + 51 + 1
- 네번째 자리 가중치 = 51 + 1
- 다섯번째 자리 가중치 = 1
각 자리의 합은 761 + 156 + 31 + 6 + 1 이다.
위와 같이 계산할 때
- "A"의 경우, 첫 번째 자리에서 0 * 781 + 1 → 1번째 단어
- "AA"의 경우, 첫 번째 자리에서 0 * 781 + 1, 두 번째 자리에서 0 * 156 + 1 → 2번째 단어
- "AAAAE"의 경우, 첫 번째 자리에서 0 * 781, 두 번째에서 0 * 156, 세 번째에서 0 * 31, 네 번째에서 0 * 6, 다섯 번째에서 1 * 1 → 6번째 단어
로 생각해야 한다.
위 반복식을 계산하는 코드는 다음과 같다.
해당 코드
using System;
public class Solution {
public int solution(string word)
{
char[] vowels = { 'A', 'E', 'I', 'O', 'U' };
int[] weight = { 781, 156, 31, 6, 1 }; // 각 자리수의 가중치 미리 계산
int result = 0;
for (int i = 0; i < word.Length; i++)
{
int index = Array.IndexOf(vowels, word[i]); // 해당 문자의 인덱스 찾기
result += index * weight[i] + 1; // 현재 자리수의 기여도를 더함
}
return result;
}
}
728x90
반응형
'코딩테스트' 카테고리의 다른 글
C# [프로그래머스] 멀리 뛰기 (0) | 2025.01.31 |
---|---|
C# [프로그래머스] PCCP 기출문제 - 동영상 재생기 (0) | 2024.11.11 |
C# [HackerRank] Algorithm(Data Structures) - Equal Stacks (0) | 2024.10.14 |
C# [프로그래머스] Lv.2 괄호 회전하기 (0) | 2024.09.16 |
C# [HackerRank] Algorithm(Data Structures) - Counting Valleys (0) | 2024.09.11 |