대충 만든 자판

이리·2025년 1월 4일
0
post-thumbnail

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

문제설명

  • 주어진 파라미터: String[] keymap, String[] targets
  • 반환값: int[]
  • 휴대폰 자판은 컴퓨터 자판과 다르게 하나의 키에 여러개의 문자가 할당됨
  • 1키 A,B,C → 한번 = A, 두번 = B, 세번 = C
  • 휴대폰 자판은 키의 개수 1 ~ 100

풀이방식

  1. 각 알파벳 별 최소 클릭 수를 알아야한다.
    • <알파벳, 인덱스>를 Map으로 저장 → 더 작은 인덱스일 경우 업데이트
  2. String을 돌면서 각 char 당 횟수를 더하기
  3. 원소는 무조건 존재 → 0일 경우 -1로 배열에 추가

코드

import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        Map<Character, Integer> m = new HashMap<>();
        
        for(String s : keymap){
            for(int i = 0; i < s.length(); i++){
                // map에 없으면 넣기 
                if(!m.containsKey(s.charAt(i))){
                    m.put(s.charAt(i),i+1);
                }else{
                    // map에 있으면 비교하고 추가하기 
                    int n = m.get(s.charAt(i));
                    if( i + 1 < n ){
                        m.put(s.charAt(i),i+1);
                    }
                }
            }
        }
        
        // String 돌면서 클릭 횟수 구하기 
        int[] answer = new int[targets.length];
        int idx = 0; 
        
        for(String str : targets){
            int sum = 0;
            boolean isValid = true;
            
            for(int i = 0; i < str.length(); i++){
                Integer num = m.get(str.charAt(i));
                if(num == null){
                    isValid = false;
                    break;
                }
                
                sum += num;     
            }
            
            // sum 추가하기 
            answer[idx] = isValid ? sum : -1 ;
            idx++;
        }
        
        return answer;
    }
}

회고

Map을 어느정도 활용할 수 있는 수준에 들어온 것 같아 뿌듯하다!


참 쉽쥬잉~?

0개의 댓글