카테고리 없음
[프로그래머스] 대충 만든 자판
메리짱123
2024. 10. 23. 09:32
반응형
map에 문자와 누르는 횟수를 저장해서
없으면 횟수 탐색하는 함수를 돌리도록 했는데
keymap의 길이가 최대 100이라 그런지 성능차이가 미미했음.
import java.util.*;
class Solution {
String[] keymap;
public int[] solution(String[] keymap, String[] targets) {
this.keymap = keymap;
int[] answer = new int[targets.length];
HashMap<String, Integer> key = new HashMap<>();
//목표 문자열 순회
for(int i=0;i<targets.length;i++){
String target = targets[i]; //목표문자열
int j=0;
int count=0;
while(j<target.length()){ //목표 문자열의 문자 탐색 ABCD
String str = target.charAt(j)+"";
int cnt = key.getOrDefault(str,0);
if(cnt==0){ //map에 담긴 횟수가 없으면 찾기
cnt = findCount(str);
}
key.put(str,cnt);
if(cnt == -1){
count = -1;
break;
}
count += cnt;
j+=1;
}
answer[i] = count;
}
return answer;
}
//알파벳을 누르기 위한 최소한의 횟수 리턴
public int findCount(String str){
int minKey = 100;
for(int i=0;i<keymap.length;i++){
String key = keymap[i];
int index = key.indexOf(str);
if(index == 0){ //1번만 눌러도 되면 1 리턴
return 1;
}else if(index == -1){ //없으면 다음 키 탐색
continue;
}else{
minKey = Math.min(index,minKey);
}
}
if(minKey == 100 ){
return -1;
}else{
return minKey += 1; //인덱스보다 1번 더 눌러야함
}
}
}
map 사용했을때 / map 사용 안 했을 때
누를 문자가 중복이 많고 길이가 길면 map을 쓰는게 낫겠지만은
이런 경우는 굳이 map 안쓰고 가독성을 잡는게 나을지도
반응형