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;
}
}
'Algorithm' 카테고리의 다른 글
[Programmers/Java] 비밀지도 (0) | 2025.03.27 |
---|---|
[Programmers/Java] 콜라 문제 (0) | 2025.03.26 |
[Programmers/Java] 문자열 내 마음대로 정렬하기 (0) | 2025.03.25 |
[Programmers/Java] 푸드 파이트 대회 (0) | 2025.03.21 |
[Programmers/Java] 숫자 문자열과 영단어 (0) | 2025.03.20 |