글 작성자: Doublsb

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

 

풀이

 

- A, E, I, O, U만을 사용해 만들 수 있는 길이 5 이하의 모든 단어가 수록된 사전

- 사전 첫 단어는 A, 그 다음이 AA, 마지막이 UUUUU

- 단어 하나가 주어지면 사전의 몇 번째 단어인지 return

 

- "A"는 "10000"으로 생각하면 편하다

- 사전은 이 숫자들을 오름차순으로 정렬했다고 보면 된다

- 예를 들어, A => 10000, AA => 11000, UEI => 52300이다.

- 10000부터 55555까지 모든 가능성을 돌리면서, 주어진 단어가 발견되면 해당 횟수를 리턴하면 되겠다

 

C#

using System;
using System.Linq;

public class Solution {
    public int solution(string word) {
        
        int counter = 0;
        string goal = convert(word);
        
        for(int i=10000; i<=55555; i++)
        {
            if(isValid(i.ToString()))
            {
                counter++;
                if(goal == i.ToString()) return counter;
            }
        }
        
        return 0;
        
    }
    
    private bool isValid(string str){
        int zeroIndex = str.IndexOf('0');
        
        if(zeroIndex != -1 
           && str.Substring(zeroIndex).Any(e => e != '0'))
        {
            return false;
        }
        else if(str.Any(e => NonValid.Contains(e))){
            return false;
        }
        else return true;
    }
    
    private readonly char[] NonValid
        = new char[] { '6', '7', '8', '9' };
    
    private string convert(string str){
        
        var result = "";
        
        for(int i=0; i<5; i++){
            if(str.Length - 1 >= i){
                switch(str[i]){
                    case 'A':
                        result += '1';
                        break;
                    case 'E':
                        result += '2';
                        break;
                    case 'I':
                        result += '3';
                        break;
                    case 'O':
                        result += '4';
                        break;
                    case 'U':
                        result += '5';
                        break;
                }
            }
            else result += '0';
        }
        
        return result;
    }
}

 

결과

100.0 / 100.0

 

피드백

더 단순하게 경우의 수를 곱하는 형태의 수학 문제처럼 풀 수도 있을 것 같은데, 그 방법을 잘 모르겠음.

나는 그냥 컴퓨터한테 맡기기로 했다 ^w^...

반응형