본문 바로가기
알고리즘

[프로그래머스/JAVA] 대충 만든 자판

by 상후 2023. 11. 12.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어 있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/160586

 

프로그래머스

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

programmers.co.kr

 

문제 설명

 

출처 : 프로그래머스

 

풀이 방법
Map을 활용하여 각 자판의 글자(key)를 최소한으로 만들 수 있는 수(Value)를 담아 사용하고자 했다.

 

내 코드(JAVA)

 

public int[] solution(String[] keymap, String[] targets) {
    int[] answer = new int[targets.length];
    Map<Character, Integer> minKeyMap = new HashMap<>();

    // keymap을 역순으로 돌아, Map에 각 키(Key)를 최소한으로 나타낼 수 있는 개수(Value)를 저장해두고 사용한다.
    for (String key : keymap) {
        char[] chars = key.toCharArray();

        for (int j = chars.length - 1; j >= 0; j--) {
            int value = minKeyMap.get(chars[j]) == null ? Integer.MAX_VALUE : minKeyMap.get(chars[j]);
            minKeyMap.put(chars[j], Math.min(value, j + 1));
        }
    }

    for (int i = 0; i < targets.length; i++) {
        int count = 0;
        for (char ch : targets[i].toCharArray()) {
            Integer getVal = minKeyMap.get(ch);

            // target을 만들 수 없을 경우 -1을 저장하고 break
            if (getVal == null) {
                count = -1;
                break;
            }
            count += getVal;
        }
        answer[i] = count;
    }

    return answer;
}

 

 

 

 

 

 

728x90
반응형

댓글