[Programmers / Level1] 160586. 대충 만든 자판(Java)

이하얀·2024년 7월 30일
0

🕊️ 프로그래머스

목록 보기
17/43

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 키의 최소 입력 횟수를 구하는 문제


알고리즘


풀이 시간 : 24분

  • map을 이용해 key 값을 찾는 방식으로 풀이
  • keymap : 현재 값이 기본적으로 key, i+1과 비교해 찾는 key가 나오는 경우 교체
  • target : key가 존재한다면 저장, 그렇지 않다면 -1 반환
import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        
        Map<Character, Integer> map = new HashMap<>();
        
        //1. keymap
        for(int i=0; i<keymap.length; i++){
            String keys = keymap[i];
            
            char key = keymap[i].charAt(i);
            int value = map.getOrDefault(key, i+1);
            
            map.put(key, Math.min(value, i+1));
        }
        
        //2. targets
        for(int i=0; i<targets.length; i++){
            for(int j=0; j<targets[i].length(); j++){
                char key = targets[i].charAt(j);
                
                if(map.containsKey(key)){
                    answer[i] += map.get(key);
                }
            }
        }
        return answer;
    }
}


오답체크


  • 테스트케이스 오답 문제
    • keymap 역시 i,j로 추가하여 해결하기
//before
//1. keymap
for(int i=0; i<keymap.length; i++){
	String keys = keymap[i];
	char key = keymap[i].charAt(i);
	int value = map.getOrDefault(key, i+1);
            
	map.put(key, Math.min(value, i+1));
}
//after
//1. keymap
for(int i=0; i<keymap.length; i++){
	String keys = keymap[i];

	for(int j=0; j<keymap[i].length(); j++){
	char key = keymap[i].charAt(j);
	int value = map.getOrDefault(key, j+1);
	
    map.put(key, Math.min(value, j+1));
    }
}


최종 풀이


풀이 시간 : 29분(첫 풀이 시간 포함)

  • map을 이용해 key 값을 찾는 방식으로 풀이
  • keymap : 현재 값이 기본적으로 key, i+1과 비교해 찾는 key가 나오는 경우 교체
  • target : key가 존재한다면 저장, 그렇지 않다면 -1 반환
import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        
        Map<Character, Integer> map = new HashMap<>();
        
        //1. keymap
        for(int i=0; i<keymap.length; i++){
            String keys = keymap[i];
            
            for(int j=0; j<keymap[i].length(); j++){
                char key = keymap[i].charAt(j);
                int value = map.getOrDefault(key, j+1);

                map.put(key, Math.min(value, j+1));
            }
        }
        
        //2. targets
        for(int i=0; i<targets.length; i++){
            for(int j=0; j<targets[i].length(); j++){
                char key = targets[i].charAt(j);
                
                if(map.containsKey(key)){
                    answer[i] += map.get(key);
                }
                else {
                    answer[i] = -1;
                    break;
                }
            }
        }
        return answer;
    }
}


결과

profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글