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

seb Incode·2023년 7월 30일
0
post-thumbnail

문제

문제 링크로 넘어가기

접근 방법

  1. 주어진 키배열의 모든 알파벳의 최소 클릭 수 저장
  2. targets 반복
    2-1 각 알파벳의 클릭 수 더하기
    2-2 없으면 반복문 멈추고 -1로 결론짓고 다음 target 문자열로 넘어가기

소스코드

import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        HashMap<Character, Integer> map = new HashMap<>();
        
        // keymap 위 모든 알파벳의 최소 클릭 수 구하기
        for(int i=0;i<keymap.length;i++){

            
            // 최소 클릭수로 덮어씌우기 위해 문자열 끝부터 시작
            for(int j=0;j<keymap[i].length();j++){
                
                
                if (map.containsKey(keymap[i].charAt(j))) {
                    // 최소 클릭 수가 뒤에 나왔을 때 갱신
                    Integer nCurrCnt = map.get(keymap[i].charAt(j));
                    if (nCurrCnt > (j+1)){
                        map.put(keymap[i].charAt(j),j+1);
                    }
                }
                else {
                    map.put(keymap[i].charAt(j),j+1);
                }
                
            }
        }
        
        
        // 모든 targets 단어에 대해 반복
        for(int i=0;i<targets.length;i++){
            int nCnt = 0;
            for(int j=0;j<targets[i].length();j++){
                char alpha = (targets[i].charAt(j));
                Integer nMinClick = map.get(alpha);
                if ( nMinClick != null ) {
                    nCnt += nMinClick;
                }
                else{
                    nCnt = -1;  // i번째 단어는 작성할 수 없음
                    break;
                }
            }
            answer[i] = nCnt;
            
        }
        
        
        
        return answer;
    }
}

필요했던 개념

HashMap.containsKey(k)

해시맵 안 데이터 중 키 값 k가 있는지 없는지 확인하는 함수
반환값 : boolean

2개의 댓글

comment-user-thumbnail
2023년 7월 30일

잘 봤습니다. 좋은 글 감사합니다.

1개의 답글