728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/160586
생각
- 해시를 이용하면 풀 수 있는 문제.
- 음... 저장한다를 못봐서 코드를 이상하게 짯다. 이상하게 짠 코드를 첨부한다.
if(!hashMap.containsKey(targets[i].split("")[j])){
return new int[]{-1};
}
// 1. keymap 배열을 순회하며 해시를 담을 때, 최소값을 담도록 하는 해시를 생성
// 2. targets 를 순회하며 해당 배열 값더하기
코드
import java.util.HashMap;
import java.util.LinkedHashMap;
public class Main {
public static void main(String[] args) {
System.out.println(solution(new String[]{"ABACD", "BCEFD"},new String[]{"ABCD","AABB"}));
System.out.println(solution(new String[]{"AA"},new String[]{"B"}));
System.out.println(solution(new String[]{"AGZ", "BSSS"},new String[]{"ASA","BGZ"}));
System.out.println(solution(new String[]{"ABCE"},new String[]{"ABDE"}));
System.out.println(solution(new String[]{"BC"},new String[]{"AC","BC"}));
}
public static int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
HashMap<String,Integer> hashMap = new LinkedHashMap<>();
for (int i = 0; i < keymap.length; i++) {
String[] row = keymap[i].split("");
for (int j = 0; j < keymap[i].length(); j++) {
String key = row[j];
// 1. keymap 배열을 순회하며 해시를 담을 때, 최소값을 담도록 하는 해시를 생성
hashMap.put(key, Math.min(j,hashMap.getOrDefault(row[j],Integer.MAX_VALUE)));
}
}
for (int i = 0; i < targets.length; i++) {
for (int j = 0; j < targets[i].length(); j++) {
if(!hashMap.containsKey(targets[i].split("")[j])){
answer[i] = -1;
break;
}
answer[i] += hashMap.get(targets[i].split("")[j])+1;
}
}
return answer;
}
}
다른 사람 풀이
- 흐름은 거의 비슷하다.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
System.out.println(solution(new String[]{"ABACD", "BCEFD"},new String[]{"ABCD","AABB"}));
System.out.println(solution(new String[]{"AA"},new String[]{"B"}));
System.out.println(solution(new String[]{"AGZ", "BSSS"},new String[]{"ASA","BGZ"}));
System.out.println(solution(new String[]{"ABCE"},new String[]{"ABDE"}));
System.out.println(solution(new String[]{"BC"},new String[]{"AC","BC"}));
}
public static int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
HashMap<Character,Integer> map = new HashMap<>();
for (String key : keymap) {
for (int j = 0; j < key.length(); j++) {
char ch = key.charAt(j);
if (map.containsKey(ch)){
if(map.get(ch)>j){
map.replace(ch,j+1);
}
}else{
map.put(ch,j+1);
}
}
}
for(int i=0; i< targets.length;i++){
int sum = 0;
for(int j=0; j<targets[i].length();j++){
char ch = targets[i].charAt(j);
if(map.containsKey(ch)){
sum+=map.get(ch);
}else{
sum = -1;
break;
}
}
answer[i] = sum;
}
return answer;
}
}
728x90
반응형
'Dev > Algorithm' 카테고리의 다른 글
[프로그래머스] 문자열 나누기 - Java (0) | 2024.05.21 |
---|---|
[프로그래머스] 둘만의 암호 - Java (0) | 2024.05.21 |
[프로그래머스] 덧칠하기 - Java (0) | 2024.05.20 |
[프로그래머스] 바탕화면 정리 - Java (0) | 2024.05.20 |
[프로그래머스] 공원 산책 - Java (0) | 2024.05.20 |