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

권권·2023년 3월 27일
0

Java 예제🛒

목록 보기
10/14
post-thumbnail

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

생각한 것

  1. Map을 활용한 유사한 문제가 생각나 Map 을 활용해야겠다고 생각
  2. Map 의 key 는 문자(char) 로 받고, 누르는 횟수를 value로 받는다고 생각
  3. Map의 contains 를 통해서 값의 변화를 준다고 생각

코드

import java.util.*;
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int answer[] = new int[targets.length];
        int sum = 0;
        
        Map<Character, Integer> map = new HashMap<>(); // keymap 
        int count = 1 ; // 몇번 눌러야하는지 (최초 1)
        
        // 각 알파벳이 몇번 눌러야 나오는지 구하기
        // keymap 의 인수만큼 돌리기
        for(int i = 0 ; i < keymap.length ; i++){
            count = 1; // 인수 한번 돌면 다음 인수는 count 초기화
            for(int j = 0 ; j < keymap[i].length() ; j++){
                // 만약, map 에 기존의 key 가 있다면
                if(map.containsKey(keymap[i].charAt(j))){
                    // 기존의 key가 있는데 , 그 값이 지금 count 보다 크면 교체 
                    if(map.get(keymap[i].charAt(j)) > count){
                        map.put(keymap[i].charAt(j), count);
                        count++;
                    }else{
                        count++;
                    }
                } else { // 기존의 키가 없을 때
                map.put(keymap[i].charAt(j) /*char*/ , count);
                    count++;
                }  
            }
        }
        
        for(int i = 0 ; i < targets.length ; i++){
            sum = 0;
            for(int j = 0 ; j < targets[i].length() ; j++){
                if(map.containsKey(targets[i].charAt(j))){
                sum += map.get(targets[i].charAt(j));
                        answer[i] = sum;    
                } else{
                    answer[i] = -1;
                    break;
                }
            }
        }
        return answer;
    }
}

for와 if 문 범벅으로 문제가 해결 되었다..
for앞에서 count를 1로 초기화해줘 키 값이 없었을 경우에 value 값을 준 것과
charAt을 통해서 문자를 추출한 뒤 그 문자를 비교하는 것이 포인트였다.

profile
안녕하세요

0개의 댓글