[프로그래머스] 모음사전 문제 풀이

프린이·2024년 11월 25일
post-thumbnail

😎문제 요약

  • 주어진 단어(word)
    ➡ 알파벳 모음 'A', 'E', 'I', 'O', 'U'로만 이루어져 있음✅
  • 단어의 길이는 최대 5자⭕
  • 사전에서 'A'부터 시작해서 가능한 모든 단어를
    정렬한 순서대로 몇 번째인지 찾는 문제❗

👩‍💻코드

function solution(word) {
  // 사용할 알파벳 모음을 배열로 저장
  const vowels = ['A', 'E', 'I', 'O', 'U'];
  
  // 순서를 저장할 변수, 첨엔 0에서 시작
  let order = 0;
  
  // 단어의 각 자리(문자)를 탐색
  for (let i = 0; i < word.length; i++) {
    // 현재 문자의 순서를 가져옴 (A=0, E=1, ... U=4)
    const index = vowels.indexOf(word[i]);
    
    // 자리별 계산
    // 781➡각 자리가 만들 수 있는 단어 개수의 누적 합
    order += index * (781 / Math.pow(5, i));  // 자리별 단어 개수 계산
    order += 1;  // 자기 자신을 포함
  }
  
  return order;
}

console.log(solution("AAAAE")); // 6
console.log(solution("AAAE"));  // 10
console.log(solution("I"));     // 1563
console.log(solution("EIO"));   // 1189

🔍알아두기

indexOf( )

string.indexOf(searchvalue, position)
문자열(string)에서 특정 문자열(searchvalue)을 찾고,
검색된 문자열이 '첫번째'로 나타나는 위치 index를 리턴🔁
👉 searchvalue : 필수 입력 값, 찾을 문자열
👉 position : optional, 기본값은 0
string에서 searchvalue를 찾기 시작할 위치

찾는 문자열 없으면 -1 리턴🔁
문자열을 찾을 때 대소문자 구분함✅

기본 예제

const str = "abab";
document.writeln(str.indexOf('ab')); // 0
document.writeln(str.indexOf('ba')); // 1
document.writeln(str.indexOf('abc')); // -1
document.writeln(str.indexOf('AB')); // -1

position 값 입력한 경우

const str = "abab";
document.writeln(str.indexOf('ab')); // 0
document.writeln(str.indexOf('ab', 1)); // 2

pow( )

첫 번째 인수를 밑(base),
두 번째 인수를 지수(exponent)로하여 거듭제곱을 반환🔁

Math.pow(2, 8);  // 256
Math.pow(2, -1); // 0.5

🔄작동 방식

▶ 단어의 자리수에 따라 사전의 단어 순서가 달라짐
▶ 각 자리수의 문자(ex - 'A', 'E')가 나올 수 있는
경우의 수 계산해서 순서를 더해줌➕
▶ 781, 156, 31, 6, 1➡각 자리에서 가능한 단어 수를 나타냄 :

  • 781 : 첫 번째 자리가 고정됐을 때 나올 수 있는 모든 경우의 수
  • 156 : 두 번째 자리
  • 31 : 세 번째 자리
  • 6 : 네 번째 자리
  • 1 : 다섯 번째 자리

예시 1 : "AAAAE"

1 ) 첫 번째 자리 ('A')
  • 'A'는 사전에서 맨 처음이라 순서를 더할 필요❌
  • order = 0
2 ) 두 번째 자리 ('A')
  • 두 번째 자리도 'A'니까 아무것도 더할 게 없음
  • order = 0
3 ) 세 번째 자리 ('A')
  • 똑같이 'A'라 아무것도 더할 게 ❌
  • order = 0
4 ) 네 번째 자리 ('A')
  • 여기도 'A', 계산 필요❌
  • order = 0
5 ) 다섯 번째 자리 ('E')
  • 'E'는 모음 배열에서 두 번째(['A', 'E'])니까, 'A' 다음 단어
  • 여기서 1을 더함➕
  • order = 1
최종적으로 :
단어 "AAAAE"의 순서➡6번째❗
왜냐 앞에 "A", "AA", "AAA", "AAAA", "AAAAA"가 있고 그담에 "AAAAE"가 옴

예시 2 : "EIO"

1 ) 첫 번째 자리 : ('E')
  • 첫 글자는 'E'
  • 'A'로 시작하는 모든 단어를 건너뛰어야함🚧🏃‍♀️
    ( 'A'로 시작하는 단어: 781개 )
  • 지금까지 순서 : 781🙆‍♀️
2 ) 두 번째 자리 : ('I')
  • 두 번째 글자 'I'
  • 'E' 뒤에서 'A'와 'E'로 시작하는 단어들을 건너뛰어야함🚧🏃‍♀️
    ✔ 'EA'로 시작 : 156개
    ✔ 'EE'로 시작 : 156개
  • 건너뛴 단어 수 : 156 + 156 = 312🏃‍♀️🚧
  • 지금까지 순서 : 781 + 312 = 1093
3 ) 세 번째 자리 : ('O')
  • 세 번째 글자 'O'
  • 'EI' 뒤에서 'A', 'E', 'I'로 시작하는 단어들을 건너뛰어야함🚧🏃‍♀️
    ✔ 'EIA'로 시작 : 31개
    ✔ 'EIE'로 시작 : 31개
    ✔ 'EII'로 시작 : 31개
  • 건너뛴 단어 수 : 31 + 31 + 31 = 93🏃‍♀️🚧
  • 지금까지 순서 : 1093 + 93 = 1186
최종 계산 ⬇
마지막으로 현재 단어 "EIO"가 들어가서 ➕1
최종 순서 : 1186 + 1 = 1189
정답 : "EIO"는 1189번째 단어
profile
안녕하세요! 퍼블리싱 & 프론트엔드 개발 공부 블로그 입니다!

0개의 댓글