알고리즘
프로그래머스 - 추억 점수
Heidong
2023. 9. 26. 22:43
반응형
내 풀이
package algorithm_Lv01;
import java.util.*;
public class P_49 {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] answer = new int[photo.length];
Map<String, Integer> map = new HashMap<String, Integer>();
// mapping name, yearning to map
for(int i=0; i<yearning.length; i++) {
map.put(name[i], yearning[i]);
}
// calculate photo score
for(int i=0; i<photo.length; i++) {
int score = 0;
for(int j=0; j<photo[i].length; j++) {
String key_name = photo[i][j];
int value_score = 0;
// check null
if(map.get(key_name) == null) {
value_score = 0;
} else {
value_score = map.get(key_name);
}
score += value_score;
}
answer[i] = score;
}
return answer;
}
public static void main(String[] args) {
// 추억 점수
P_49 p = new P_49();
String[] name = {"may", "kein", "kain", "radi"};
int[] yearning = {5, 10, 1, 3};
String[][] photo = {
{"may", "kein", "kain", "radi"},
{"may", "kein", "brin", "deny"},
{"kon", "kain", "may", "coni"}
};
int[] result = p.solution(name, yearning, photo);
System.out.println(Arrays.toString(result));
}
}
HashMap을 이용해서 키와 값으로 name과 yearning을 매핑하고
map의 키를통해서 값에 접근하는 방식으로 2차원 배열을 반복문으로 순회 하면 쉽게 풀 수 있는 문제이다.
다만 name에는 있어도 yearning에는 값이 없을 수 있기 때문에 null 체크가 필요하다.
다른 사람 풀이 - 1
import java.util.*;
class Solution {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] answer = new int[photo.length];
HashMap<String,Integer> map = new LinkedHashMap<>();
for(int i=0; i< name.length; i++){
map.put(name[i],yearning[i]);
}
for(int i =0; i< photo.length;i++){
String[] persons = photo[i];
int score = 0;
for(int j=0; j<persons.length; j++){
String person = persons[j];
if(map.containsKey(person)){
score+=map.get(person);
}
}
answer[i]=score;
}
return answer;
}
}
여기서는 LinkedHashMap을 사용했는데 링크드 해쉬맵은 put할때의 순서를 기억하는 map이다.
그리고 나는 null 체크 방식으로 했지만 여기서는 containsKey를 통해서 확인한 모습이다.
다른 사람 풀이 - 2
class Solution {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] answer = new int[photo.length];
for(int i = 0; i < photo.length; i++){
for(int j = 0; j < photo[i].length; j++){
for(int k = 0; k < name.length; k++){
if(photo[i][j].equals(name[k])) answer[i] += yearning[k];
}
}
}
return answer;
}
}
여기서는 map 사용없이 3중 for문을 통해서 문제를 풀이한 모습이다.
반응형