본문 바로가기
스터디/묘공단 자바 코딩테스트

[프로그래머스/Java] 4일차 코테 문풀 - Lv. 1 추억 점수

by 빙수야 팥빙수야 2024. 4. 19.

🔗 문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 문제 요약

사진 속에 나오는 인물의 그리운 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다.

그리워하는 사람의 이름을 담은 문자열 배열 name,

각 사람별 그리움 점수를 담은 정수 배열 yearning,

각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어질 때,

사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return 하세요!

입출력 예

 

🔍 문제 풀이 (feat. 접근 방법)

처음 문제를 읽었을 때는 아 배열 관련 문제구나 생각했는데 천천히 곱씹어보니, Map자료구조 문제였다.

특정 문자열과 그리움 점수를 각각 key와 value로 매핑해야 하기 때문에 이를 활용하려면 HashMap이 필요하다.

  1. name과 yearning배열의 각 값을 key와 value로 매핑한다.
  2. photo를 통해 이중 for문으로 돌면서 photo에 해당 name값이 존재하는지 확인한다.
    1. 존재한다면, 해당 name의 value인 yearning값을 가지고 와서 생성한 변수 tmp에 누적해서 더한다.
  3. for문의 마지막에서 정답 변수인 answer에 tmp값을 넣고 tmp값은 다시 0으로 초기화한다.
  4. for문이 끝날 때까지 반복한다.

 

👩🏻‍💻 전체 코드

import java.util.*;

class Solution {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
        int[] answer = new int[photo.length];
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        for (int i = 0; i < name.length; i++) {
            map.put(name[i], yearning[i]);
        }
        
        for (int j = 0; j < photo.length; j++) {
            int tmp = 0;
            for (int k = 0; k < photo[j].length; k++) {
                if(map.containsKey(photo[j][k])) {
                    tmp += map.get(photo[j][k]);
                }
            }
            answer[j] = tmp;
        }
        return answer;
    }
}