본문 바로가기
알고리즘/프로그래머스

(LEVEL 1)프로그래머스 - 대충 만든 자판 (JAVA)

by 꾸준함 2023. 3. 1.

문제

 


입출력 예


풀이.

1. 각 알파벳들의 최소 인덱스가 저장될 HashMap 선언

2.  answer를 targets의 길이만큼 초기화 ( 처음에 keymap의 크기만큼 초기화해서 런타임에러가 났다.)

3. keymap의 길이 만큼 반복문을 돌고 이중 포문으로 각 원소들의 길이만큼 돌며 각 알파벳들의 최소 인덱스를 저장.

    (값이 있다면 그냥 비교하면 되지만 알파벳 이 첫 등장이라면 map에서 가져올수가 없어 getOrDefault로 101을 넣어줬다. - 원소의 최대길이가 100이어서) 

4. 각 최소 인덱스를 다 저장한후에 targets의 길이만큼 똑같이 반복문을 돌며 sum에다가 저장. ( 단, 알파벳에 대한 인덱스가 없는 경우 sum에 -1을 넣고 안쪽 for문을 break

5. 바깥쪽 for문이 반복할 때 마다 answer에 값을 넣어주고 sum을 0으로 초기화

 

 

 


코드

import java.util.*;
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        
        HashMap<Character,Integer> map = new HashMap<>();
        int[] answer = new int[targets.length];
        
        for(int i=0;i<keymap.length;i++){
            for(int j=0;j<keymap[i].length();j++){
                if( map.getOrDefault(keymap[i].charAt(j),101) > j+1 )
                    map.put(keymap[i].charAt(j),j+1);
            }
        }
        
        for(int i=0;i<targets.length;i++){
            int sum=0;
            for(int j=0;j<targets[i].length();j++){
                if( map.getOrDefault(targets[i].charAt(j),0) == 0 ){
                    sum = -1;
                    break;
                }else{
                    sum += map.get(targets[i].charAt(j));
                }
            }
            answer[i] = sum;
        }
        
        
        return answer;
    }
}