✔ 추억 점수
문제 분석하기
값을 삽입하고 검색하는 평균 시간 복잡도가 O(1)인 HashMap 자료 구조를 사용해서 인물의 이름과 그리움 점수를 저장한 후,
사진 속 인물의 그리움 점수를 합하도록 함
손으로 풀어보기
- HashMap에 인물의 이름과 그리움 점수를 저장
- 사진 속 인물의 그리움 점수를 합함
슈도코드 작성하기
name(그리워하는 사람의 이름을 담은 문자열 배열)
yearning(각 사람별 그리움 점수를 담은 정수 배열)
photo(각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열)
missing(그리워하는 사람의 이름과 그리움 점수를 담은 hashMap)
missing에 name, yearning 저장하기
사진 속 이름의 그리움 점수 합산하기
합산된 그리움 점수들 반환하기
코드 구현하기
/**
* 176963) 추억_점수
*/
public class L076_176963 {
// name(그리워하는 사람의 이름을 담은 문자열 배열)
// yearning(각 사람별 그리움 점수를 담은 정수 배열)
// photo(각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열)
public int[] solution(String[] name, int[] yearning, String[][] photo) {
// missing(그리워하는 사람의 이름과 그리움 점수를 담은 hashMap)
Map<String, Integer> missing = new HashMap<>();
// missing에 name, yearning 저장하기
for (int i = 0; i < name.length; i++) {
missing.put(name[i], yearning[i]);
}
// 사진 속 이름의 그리움 점수 합산하기
int[] answer = new int[photo.length];
for (int i = 0; i < photo.length; i++) {
int sum = 0;
for (int j = 0; j < photo[i].length; j++) {
sum += missing.getOrDefault(photo[i][j], 0);
}
answer[i] = sum;
}
// 합산된 그리움 점수들 반환하기
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L076_176963 solution = new L076_176963();
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 = solution.solution(name, yearning, photo);
System.out.println(Arrays.toString(result));
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[161990] 바탕화면 정리 (0) | 2023.10.19 |
---|---|
[172928] 공원 산책 (0) | 2023.10.18 |
[178871] 달리기 경주 (0) | 2023.10.16 |
[2166] 다각형의 면적 (0) | 2023.10.15 |
[2162] 선분 그룹 (0) | 2023.10.15 |