알고리즘

프로그래머스 - 추억 점수

Heidong 2023. 9. 26. 22:43
반응형

 


 

내 풀이

package algorithm_Lv01;
import java.util.*;

public class P_49 {
	
	public int[] solution(String[] name, int[] yearning, String[][] photo) {
        int[] answer = new int[photo.length];
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        // mapping name, yearning to map
        for(int i=0; i<yearning.length; i++) {
            map.put(name[i], yearning[i]);
        }
                
        // calculate photo score
        for(int i=0; i<photo.length; i++) {
            int score = 0;
            for(int j=0; j<photo[i].length; j++) {
                String key_name = photo[i][j];
                int value_score = 0;
                // check null
                if(map.get(key_name) == null) {
                    value_score = 0;
                } else {
                    value_score = map.get(key_name);
                }
                score += value_score;
            }
            answer[i] = score;
        }
        
        return answer;
    }

	public static void main(String[] args) {
		// 추억 점수
		P_49 p = new P_49();
		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 = p.solution(name, yearning, photo);
		System.out.println(Arrays.toString(result));
	}

}

HashMap을 이용해서 키와 값으로 name과 yearning을 매핑하고 

map의 키를통해서 값에 접근하는 방식으로 2차원 배열을 반복문으로 순회 하면 쉽게 풀 수 있는 문제이다.

다만 name에는 있어도 yearning에는 값이 없을 수 있기 때문에 null 체크가 필요하다.

 


 

다른 사람 풀이 - 1

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 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)){
                    score+=map.get(person);
                }
            }
            answer[i]=score;
        }

        return answer;


    }
}

여기서는 LinkedHashMap을 사용했는데 링크드 해쉬맵은 put할때의 순서를 기억하는 map이다.

그리고 나는 null 체크 방식으로 했지만 여기서는 containsKey를 통해서 확인한 모습이다.

 


 

다른 사람 풀이 - 2

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++){
            for(int j = 0; j < photo[i].length; j++){
                for(int k = 0; k < name.length; k++){
                    if(photo[i][j].equals(name[k])) answer[i] += yearning[k];
                }
            }
        }
        return answer;
    }
}

여기서는 map 사용없이 3중 for문을 통해서 문제를 풀이한 모습이다.

 

반응형