스터디/99클럽 코테 스터디 TIL

99클럽 코테 스터디 16일차 모음사전

Been 2024. 8. 7. 09:38

📝 문제

 

프로그래머스

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

programmers.co.kr

🔥 시도해본 접근 방식

일단 문제에서 말하는 사전이란 것을 구현하여 탐색하기로 하였다.

Map 을 선언하여 key는 단어, value는 인덱스를 갖도록 구성한다.

단순하게 문자별로 반복문을 돌려서 사전을 만들었는데 이렇게 하다보니 5중 반복문이 되어서 시간초과가 발생하겠거니 하고 일단 제출하였는데 통과해서 당황스러웠다.

 

✨ 성공 코드

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String word) {
        String[] d = new String[]{"A", "E", "I", "O", "U"};

        Map<String, Integer> map = new HashMap<>();

        int order = 1;

        for (int i = 0; i < d.length; i++) {
            map.put(d[i], order++);
            for (int j = 0; j < d.length; j++) {
                map.put(d[i] + d[j], order++);
                for (int k = 0; k < d.length; k++) {
                    map.put(d[i] + d[j] + d[k], order++);
                    for (int l = 0; l < d.length; l++) {
                        map.put(d[i] + d[j] + d[k] + d[l], order++);
                        for (int m = 0; m < d.length; m++) {
                            map.put(d[i] + d[j] + d[k] + d[l] + d[m], order++);
                        }
                    }
                }
            }
        }

        return map.get(word);
    }
}

이 문제는 다른 효율적인 방법을 추가로 공부하고 다른 사람의 풀이도 좀 봐야겠다.

 

더보기
import java.lang.Math;

class Solution {
    public int solution(String word) {
        int answer = word.length();
        int pos;
        for(pos = 0; pos < word.length(); pos ++){
            char c = word.charAt(pos);
            if(c=='A') continue;
            int temp = 0;
            for(int i = 0; i <= 4-pos; i++){
                temp += Math.pow(5,i);
            }
            answer += temp*val(c);
        }
        return answer;
    }

    public int val(char c){
        if(c=='E') return 1;
        else if(c=='I') return 2;
        else if(c=='O') return 3;
        else return 4;
    }
}