-
프로그래머스 - 추억 점수알고리즘 2023. 9. 26.반응형
내 풀이
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문을 통해서 문제를 풀이한 모습이다.
반응형'알고리즘' 카테고리의 다른 글
프로그래머스 - 달리기 경주 (0) 2023.09.18 프로그래머스 - 둘만의 암호 (0) 2023.02.26 프로그래머스 - 문자열 나누기 (0) 2023.02.05 프로그래머스 - 크기가 작은 부분문자열 (0) 2023.01.24 프로그래머스 - 콜라 문제 (0) 2022.11.04