프로그래머스- 대충만든자판

JIWOO YUN·2023년 3월 17일
0

문제링크

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

구현방법

HashMap과 HashSet을 통해서 구현했습니다.

HashSet을 사용한 이유는 문자가 있는지 탐색할때 Map보다는 훨씬 빠른속도로 탐색 할 수있기때문에 있는지 체크할경우는 Set을 통해서 진행했습니다.

만약 그 문자가 있는경우에는 HASHMAP의 문자가 가지고 있는 idx값과 비교해서 현재 문자가 원래 들어있던 idx보다 작은경우 갱신해주고 아닌경우 넘어가줍니다.

그리고 나서 target의 각 문자에 대해서 체크하여서 HashSet의 문자가 없는경우는 -1을 리턴하고 아닌경우 count에 값을 더해줘서 전부 구하게 되면 그 target배열의 idx에 맞는 answer 배열에 넣어줘서 저장해두고 전부 구했을경우 리턴해줍니다.

구현알고리즘

HashMap,HashSet

CODE

import java.util.HashMap;
import java.util.HashSet;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        HashMap<Character,Integer> map = new HashMap<>();
        //있는지 없는지 체크용도
        HashSet<Character> check = new HashSet<>();

        for(int idx = 0; idx <keymap.length;idx++){
            for(int start = 0; start < keymap[idx].length();start++){
                char alpha = keymap[idx].charAt(start);
                //이미 idx를 가지고 존재할경우
                if(check.contains(alpha)){
                    if(map.get(alpha) > start+1){
                        map.put(alpha,start+1);
                    }
                }else {
                    check.add(alpha);
                    map.put(alpha,start+1);
                }
            }
        }
        for(int idx= 0;idx<targets.length;idx++){
            int count = 0;
            for(int start = 0; start < targets[idx].length();start++){
                if(!check.contains(targets[idx].charAt(start))){
                    count = -1;
                    break;
                }
                count += map.get(targets[idx].charAt(start));
                System.out.println(count);
            }
            answer[idx] = count;
        }
        return answer;
    }
}
profile
Backend Developer 지원 / 도전

0개의 댓글