본문 바로가기
Programmers/Lv.1

[프로그래머스] Lv.1 추억 점수 JAVA 풀이

by Poorm 푸름 2023. 8. 21.

문제 Lv.1 추억 점수

:  사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수 매기기

 

name은 그리워 하는 사람 이름 (문자열 배열) 

   yearning은 그리움 점수 (정수 배열)

   photo는 사진에 찍힌 이름 (2차원 문자열 배열)

 

 (예시) 

   name
   그리운 사람 [ 수지, 짱구, 유리, 영희 ]

   yearning
  점수 [ 5, 10, 1, 3 ]

   photo
  사진에 찍힌 사람
   
   # 1 [ 철수 - 짱구 - 맹구 - 훈이 ] 
   # 2 [ 수지 - 짱구 - 유리 - 영희 ]
   # 3 [ 영희 - 짱구 - 맹구 - 훈이 ]
 
  최종 결과  
   그리움 점수 [ 10, 19, 13 ]

 

<2차원 배열>

arr [ A ] [ B ] 

- A = 행

- B = 열

- 표현식 =  {  열 개수만큼 . . .}             

                  {  열 개수만큼 . . .}                 

                             :                                            

                     행 개수만큼                                       

                             :

   (Ex)  arr [3][2] 라면 열 = 3, 행 = 2
  {6, 3},
  {4, 1},
  {3, 2} 

 

<Map>

:  키(Key)와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조
:  키는 맵에 오직 유일하다(같은 맵에 중복 X)

   값(value)은 중복돼도 OK

 

<HashMap>

 

:  해싱된 맵

:  비슷하게는 Hashtable이 있다

   두 개의 차이점  -  Thread 관점에서의 안전한 것은 Hashtable

                             -  안전하지는 않지만 속도가 빠른 HashMap

 

 [코드]

import java.util.*;

class Solution{
   public int[] solution(String[] name, int[] yearning, String[][] photo) {
       int[] score = new int[photo.length];
       Map<String,Integer> m = new HashMap<>();
        
       for(int i=0; i< name.length; i++){
            m.put(name[i], yearning[i]); 
       }
       
       for(int i=0; i< photo.length; i++){
            for(int j=0; j<photo[i].length; j++){
                score[i] += m.getOrDefault(photo[i][j], 0);
            }
       }
      return score;
    }
  }

 

[해석]

for(int i=0; i< photo.length; i++){ for(int j=0; j<photo[i].length; j++){ score[i] += m.getOrDefault(photo[i][j], 0); } } return score; } }

 

:  public int[] solution(String[] name, int[] yearning, String[][] photo)  메서드 안에서 사용할 매개변수 선언

 

:  int[] score = new int[photo.length];  photo  맨 나중에 행의 개수만큼 출력할 score 만들기
      

:  Map<String, Integer> m = new HashMap<>();  맵 m을 선언 (Key = 그리운 이름, Value = 그리움 점수)
        
:  for(int i = 0; i<name.length;i++){  그리워하는 이름만큼 반복하기

         m.put(name[i], yearning[i]);  그리운 사람들 이름과 그리움 점수를 맵에 넣는다
   }
        
:  for(int i=0; i< photo.length; i++){  photo의 행 만큼 반복한다

        for(int j=0; j<photo[i].length;i++){  반복되는 i번째 행 안에서 열 만큼 반복한다

              score[i] += m.getOrDefault(photo[i][j], 0);  score도 행끼리 계산해서 출력한다
        }                                                                       맵에서 photo[i][j]의 값과 같은 key(그리운 이름)를 찾으면

                                                                                해당key의 value(점수)를 score에 더해주고 못찾으면 0점 처리

        

:  return score;  최종 선수들 호출  

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *