🔗 프로그래머스 Lv.1 - 추억 점수
문제


풀이
1. 해시맵 선언 및 저장
- 배열로 전달받은 이름(String)과 그리움 점수(Integer)를 map에 저장한다.
- 제한사항에
name의 길이 = yearning의 길이라고 제시되어있으므로 단순히 name의 길이만큼 반복하며 저장하면 된다.
int[] answer = new int[photo.length];
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i<name.length; i++){
map.put(name[i], yearning[i]);
}
2. 점수 계산
- 주의할 점으로는, map에 key가 있는지 확인해야 한다. 그리움점수가 없는 이름(즉, map에 저장되지 않은 이름)으로
map.get()메소드를 호출하면 0이 아니라 null이 반환되기 때문(NullPointerException 발생)
for(int i = 0; i<photo.length; i++){
for(int j = 0; j<photo[i].length; j++){
if(map.containsKey(photo[i][j]))
answer[i] += map.get(photo[i][j]);
}
}
전체 코드
- 기타 주의할 점으로는 import문을 직접 작성해줘야 한다.
- 프로그래머스에서 기본 작성되어있는 answer 선언 코드는
int[] answer = {};였는데, 길이가 0인 배열을 선언하는 코드이다. 여기에 바로 값을 저장하려고하면 ArrayIndexOutOfBoundsException가 발생하므로 사진의 개수(photo.length)만큼 크기로 초기화해주어야 한다.
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 HashMap<>();
for(int i = 0; i<name.length; i++){
map.put(name[i], yearning[i]);
}
for(int i = 0; i<photo.length; i++){
for(int j = 0; j<photo[i].length; j++){
if(map.containsKey(photo[i][j]))
answer[i] += map.get(photo[i][j]);
}
}
return answer;
}
}