728x90
반응형
SMALL
지난 문제만 어려운줄 알았는데 이번거도 쉽지않다;;
1래벨이 어려운건지 아님 내가 못하는건지....
키보드의 자판순서를 위한 for문, targets를 비교하기위한 for문, 순서대로 처리하기 위한 for문 3개를 만들다보니
너무 어지럽고 정신없어서 처음부터 다시 코딩했다
(실패한 흔적 ↓ )
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
int chk = 0;
for(int i=0; i<targets.length; i++){
String tg[] = targets[i].split("");
for(int j=0; j<keymap.length; j++){
String km[] = keymap[j].split("");
for(int z=0; z<tg.length; z++){
if(tg[i].equals(km[j])){
chk++;
}
}
}
if(chk == 0) chk = -1;
answer[i] = chk;
chk = 0;
}
return answer;
}
}
정신없이 헤메다가 힌트!(질문하기)를 봤다
질문하기에서 정신없이 정보를 얻을데 없나 찾던 중 엄탱님의 개발 블로그를 봤다.(출처)
세상은 넓고 천재들은 많구나...(아님 내가 우물안 개구리?!)
문제를 풀 때 생각치 못한 부분으로 풀어내는 것에 놀랐고 바로 구독과 댓글을 달아버렸다
나는 문제를 해결하기 위해서 targets 의 데이터를 분석하기에 급급했는데,
이 해설에서는 기준점이 되는 키보드인 keymap 에 기준값을 셋팅하고 이후에 targets 을 통해 정답을 뽑아냈다.
이 문제는 직접 풀기보다 참고하고 배운 문제이기 때문에 나중에 다시 풀어봐야겠다....
정답
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
Map<Character, Integer> map = new HashMap<>();
int ans = 0;
for(String s : keymap){
for(int i=0; i<s.length(); i++){
char key = s.charAt(i);
// keymap의 전체 알파벳에 숫자를 매김
// Math.min 에서 예를 들어 ABACD 이면 B를 입력하기위해서는
// 자판을 두번 눌러야되기 때문에 2 이고 이것 때문에 i+1 을 해줌
// map.getOrDefault(key, 10000)는 map에서
// key 값이 있으면 해당 숫자를 불러오고 없으면 뒤에 숫자를 넣어주는데
// Math.min 에서 둘 중 작은 숫자를 뽑아내기 때문에 10000 값이 들어갈 일은 없다.
map.put(key, Math.min(i+1, map.getOrDefault(key, 10000 )));
}
}
// 여기에서는 target에서 각각 알파벳마다 char 을 통해
// map으로 키값을 얻어오면 된다.
for(int i=0; i<targets.length; i++){
for(int j=0; j<targets[i].length(); j++){
char tg = targets[i].charAt(j);
if(map.containsKey(tg)){
answer[i] += map.get(tg);
}else{
answer[i] = -1;
break;
}
}
}
return answer;
}
}
출처
프로그래머스 - https://school.programmers.co.kr/learn/courses/30/lessons/160586
728x90
반응형
LIST
'코딩 테스트' 카테고리의 다른 글
프로그래머스) K번째 수 Lv1 (0) | 2024.02.05 |
---|---|
프로그래머스) 기사단원의 무기 Lv1 (2) | 2024.02.05 |
프로그래머스) 명예의 전당(1) Lv1 (0) | 2024.02.04 |
프로그래머스) 카드 뭉치 Lv1 (0) | 2024.02.04 |
프로그래머스) 추억 점수 Lv1 (0) | 2024.02.03 |