쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 구현
  • jpa
  • 인프런
  • 부스트코스
  • querydsl
  • 위클리 챌린지
  • 자바
  • 누적합
  • 타임리프
  • spring
  • 코딩테스트
  • 스프링
  • 알고리즘
  • BFS
  • Spring Data JPA
  • MVC
  • 비트마스킹
  • 백분
  • 백준
  • 프로그래머스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

코딩테스트/[프로그래머스] 코딩테스트 연습

모음 사전

2021. 9. 2. 00:21

문제 설명

사전에 알파벳 모음 '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번째 단어입니다.

 


풀이 방법 생각

숫자로 바꿔서 하나씩 더해가면서 비교하는 방법을 생각했다. a는 1, e는 2 이런식으로 같다고 놓고 6에서 다음으로 넘어갈 때 0으로 바꿔주고 0을 제거 해줬다. 굳이 바꿔주고 제거하지 않고 그냥 바로 제거했어도 될 것 같다. 

 

내 코드

class Solution {
    public int solution(String word) {
        int answer = 0;
        int num = 0;
        char[] alpa = {'A', 'E', 'I', 'O', 'U'};

        for (int i = 0; i < alpa.length; i++) {
            word = word.replace(alpa[i], (char) (i + '1'));
        }  

        while (num != Integer.parseInt(word)) {
            answer++;
            if (num < 10000)
                num = num * 10 + 1;
            else {
                num += 1;
                if (num % 10 == 6) {
                    num += 4;
                    if ((num / 10) % 10 == 6)
                        num += 40;
                    if ((num / 100) % 10 == 6)
                        num += 400;
                    if ((num / 1000) % 10 == 6)
                        num += 4000;
                    while (num % 10 == 0) {
                        num /= 10;
                    }
                }
            }
        }
        return answer;
    }
}

 

다른 사람 풀이

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;
    }
}

경우의 수 계산해서 풀이 했다고 설명되어 있다. per은 총 경우의 수로 "UUUUU"일 경우 결과값이다. 자릿 수는 5라서 5씩 나눠주고 각 인덱스마다 경우의 수를 계산해서 더해주었다.

'코딩테스트 > [프로그래머스] 코딩테스트 연습' 카테고리의 다른 글

괄호 변환  (0) 2021.09.07
복서 정렬하기  (0) 2021.09.06
퍼즐 조각 채우기  (0) 2021.08.26
직업군 추천하기  (0) 2021.08.23
상호 평가  (0) 2021.08.10
    '코딩테스트/[프로그래머스] 코딩테스트 연습' 카테고리의 다른 글
    • 괄호 변환
    • 복서 정렬하기
    • 퍼즐 조각 채우기
    • 직업군 추천하기
    쵼쥬
    쵼쥬

    티스토리툴바