코딩 테스트(Coding Test)/프로그래머스

[프로그래머스] 모음사전 - 자바(Java)

잇트루 2023. 9. 20. 00:45
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해 주세요.

 

 

제한사항

  • word의 길이는 1 이상 5 이하입니다.
  • word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.

 

 

입출력 예

word result
"AAAAE" 6
"AAAE" 10
"I" 1563
"EIO" 1189

 

 

입출력 예 설명

입출력 예#1

사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.

 

입출력 예#2

"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.

 

입출력 예#3

"I"는 1563번째 단어입니다.

 

입출력 예#4

"EIO"는 1189번째 단어입니다.

 

 

코드

주어진 문자열 word가 모음사전 규칙에 따라 몇 번째 단어인지 반환하는 문제다.

 

class Solution {
    public int solution(String word) {
        String str = "AEIOU"; // 모음 문자열
        int[] nums = {781, 156, 31, 6, 1}; // 각 자리수의 가중치
        int answer = word.length(); // word의 길이로 초기화

        // 배열 word 순회
        for (int i = 0; i < word.length(); i++) {
            // 현재 문자가 모음 str의 몇 번째 인덱스인지 저장
            int idx = str.indexOf(word.charAt(i));
            // 현재 문자의 가중치 * idx
            answer += nums[i] * idx;
        }

        return answer;
    }
}

코드 설명

주석 참고

  • 모음 문자열 str을 선언하고, 각 자릿수에 따라 알파벳이 바뀔 때마다 증가하는 가중치 배열 nums를 초기화한다.
    • 예를 들어, 첫 번째 문자가 모음 A인 경우에는 781, 두 번째 모음 문자가 E인 경우 156을 더한다.
  • answer를 입력받은 word의 길이로 초기화한다.
    • answer가 "A", "E", "I", "O" 등 1글자인 경우 1, "AA", "AE", "AI", ... 이면 2, ...
  • for 문을 통해 i가 word의 길이만큼 순회한다.
    • 현재 문자가 모음 문자열인 str의 몇 번째 인덱스인지 추출하여 idx를 선언한다.
    • answer에 가중치 * idx를 더한다.
    • 현재 문자가 A인 경우, str의 0번째 인덱스이므로 어떠한 가중치가 와도 0과 곱하므로 0이 된다.
반응형