Algorithm

[Programmers/Java] 추억 점수

patrck_jjh 2025. 3. 28. 17:33

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/176963

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

 

 

import java.util.Arrays;

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++) {
            int result = 0;
            for (int j=0; j < photo[i].length; j++) {

                if ( Arrays.asList(name).contains(photo[i][j]) ) {
                    int idx = Arrays.asList(name).indexOf(photo[i][j]);
                    result += yearning[idx];
                }
            } // end j
            answer[i] = result;
        } // end i
        return answer;
    }
}

 

배열을 Arrays.asList()활용해 ArrayList로 변환?

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
  • Arrays.asList()는 Arrays의 private 정적 클래스인 ArrayList를 리턴함(java.util.ArrayList 클래스와는 다른 클래스)
  • set(), get(), contains() 메서드를 가지고 있지만 원소의 추가/삭제가 불가능하다.

 

코드의 비효율성

  • 현재 코드에서는 Arrays.asList(name).contains()와 Arrays.asList(name).indexOf()를 사용하여 name 배열에 있는 요소를 찾음
  • 이 방식은 배열을 리스트로 변환한 후, 해당 리스트에서 이름을 검색하는 방식으로 매번 배열을 리스트로 변환하는 과정이 비효율적(특히 배열의 크기가 커질 경우, 성능 저하가 발생)
  • 효율성을 높이기 위해, name과 yearning 배열을 하나의 Map<String, Integer>로 변환하여 이름을 빠르게 찾을 수 있게 개선

 

HashMap사용 코드

import java.util.*;

class Solution {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
    int[] answer = new int[photo.length];
    
    // name과 yearning을 매핑한 Map 생성
    Map<String, Integer> yearningMap = new HashMap<>();
    
    for (int i = 0; i < name.length; i++) {
        yearningMap.put(name[i], yearning[i]);
    }
    
    // 각 사진에 대해 점수 계산
    for (int i = 0; i < photo.length; i++) {
        int result = 0;
        for (int j = 0; j < photo[i].length; j++) {
            // 이름이 Map에 있으면 해당 점수 추가
            if (yearningMap.containsKey(photo[i][j])) {
                result += yearningMap.get(photo[i][j]);
            }
        }
        answer[i] = result;
    }
    return answer;
    }
}