https://school.programmers.co.kr/learn/courses/30/lessons/176963
문제 접근
사진 속 인물은 여러 명이지만 모두를 그리워하진 않는다.
그리워하는 인물들은 따로 정해져있는데 이 인물들마다 그리움 점수가 있다.
이 그리워하는 인물들은 2차원 배열 안에 그룹별로 흩어져있다.
그룹별로 그리움 점수를 합산
그리워하는 이름들이랑 2차원 배열들이랑 일일이 비교하면 되지 않을까? 라는 생각이 들었는데 그렇게 단순한 문제면 일일이 비교했을 때 시간제한이 걸리게 만들어 놓지 않았을까? → 그런 거 없이 삼중 for문으로도 그냥 풀림, 예전에 정답률 50% 문제에도 끙끙 앓았던 적이 있어서 이 문제도 과대평가한 듯
name과 yearning 매칭은 map 사용하거나 for문은 같은 인덱스 별로 묶어 계산
배열은 0부터 N까지 돌아가면서 탐색
map은 해당 key에 있는 value를 바로 가져온다 → 속도 빠름
for문 풀이
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++) { // photo 요소
for(int j=0; j<photo[i].length; j++) { // photo 요소의 요소? 뭐라 부르지;
for(int k=0; k<name.length; k++) {
if(photo[i][j].equals(name[k])) answer[i] += yearning[k];
}
}
}
return answer;
}
}
다른 사람 풀이
단순 배열보단 map을 활용한 풀이가 빨라서 그런지 다른 사람들은 map을 많이 활용하였더라
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)){ // map의 key에 photo 속 사람이 있다면
score+=map.get(person); // 점수 추가
}
}
answer[i]=score;
}
return answer;
}
}
케이스가 짧은 건 몰라도 길어질다면 확실히 속도 차이가 난다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 연속된 부분 수열의 합 / JAVA] (1) | 2023.04.13 |
---|---|
[프로그래머스 / 달리기 경주 / JAVA] (0) | 2023.04.11 |
[프로그래머스 / 공원 산책 / JAVA] (0) | 2023.03.27 |
[프로그래머스 / 덧칠하기 / JAVA] (0) | 2023.03.24 |
[프로그래머스 / 폰켓몬 / JAVA / 해시] (0) | 2023.03.23 |
댓글