본문 바로가기

코딩테스트/programmers

모음사전

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

 

프로그래머스

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

programmers.co.kr

 

처음엔 규칙성을 찾아 풀어보았다.(solution1())

 

각 자리의 문자가 1개 증가할때마다 각각 781, 156, 31, 6, 1 씩 증가한다.

 

속도는 빠르지만....

 

이 규칙을 찾기가 쉽지 않을 뿐더러, 문제 조건이 바뀌면 다시 계산해야하는 문제가 있기때문에..

 

얌전히 dfs로 다시 풀었다.(solution())

 

class Solution {
    
    int answer = 0;
    boolean complete = false;
    
    public int solution(String word) {
        
        String[] chars = { "A", "E", "I", "O", "U" };
        
        for (String c : chars) {
            find(chars, word, c);
        }
        
        return answer;
        
    }
    
    void find(String[] chars, String word, String comp) {
        
        if (comp.length() > 5) return;
        
        if (!complete) answer++;
        
        if (word.equals(comp)) {
            complete = true;
        }
        
        if (complete) return;
        
        for (String c : chars) {
            find(chars, word, comp + c);
        }
        
    }
    
    final int[] weight = { 781, 156, 31, 6, 1 };
    
    public int solution1(String word) {
        
        char[] split = word.toCharArray();
        
        int answer = 0;
        for (int i = 0; i < split.length; i++) {
            
            char c = split[i];
            
            int idx = idx(c);
            
            answer += (weight[i] * idx + 1);
            
        }
        
        return answer;
    }
    
    int idx(char c) {
        switch(c) {
            case 'A' : return 0;
            case 'E' : return 1;
            case 'I' : return 2;
            case 'O' : return 3;
            case 'U' : return 4;
        }
        return -1;
    }
}

'코딩테스트 > programmers' 카테고리의 다른 글

주차 요금 계산  (0) 2023.10.25
더 맵게  (0) 2023.10.23
게임 맵 최단거리  (0) 2023.10.23
n진수 게임  (1) 2023.10.18
압축  (1) 2023.10.18